mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
62 lines
2.2 KiB
C++
62 lines
2.2 KiB
C++
#include "gtest/gtest.h"
|
|
#include "common/goos/Reader.h"
|
|
#include "common/util/FileUtil.h"
|
|
#include "common/goos/PrettyPrinter.h"
|
|
|
|
using namespace goos;
|
|
|
|
namespace {
|
|
Object read(const std::string& str) {
|
|
auto body = pretty_print::get_pretty_printer_reader().read_from_string(str).as_pair()->cdr;
|
|
EXPECT_TRUE(body.as_pair()->cdr.is_empty_list());
|
|
return body.as_pair()->car;
|
|
}
|
|
|
|
std::string pprint(const Object& o, int len = 80) {
|
|
return pretty_print::to_string(o, len);
|
|
}
|
|
|
|
// read then pretty print a string.
|
|
std::string ppr(const std::string& in, int len = 80) {
|
|
return pprint(read(in), len);
|
|
}
|
|
} // namespace
|
|
|
|
TEST(PrettyPrinter, Basics) {
|
|
EXPECT_EQ(ppr("test"), "test");
|
|
EXPECT_EQ(ppr("(l 12 asdf)"), "(l 12 asdf)");
|
|
|
|
// force it to break
|
|
EXPECT_EQ(ppr("(thing 12 asd asfd sdfjk)", 10), "(thing\n 12\n asd\n asfd\n sdfjk\n )");
|
|
}
|
|
|
|
TEST(PrettyPrinter, ReadAgain) {
|
|
// first read the gcommon file
|
|
auto gcommon_code = pretty_print::get_pretty_printer_reader().read_from_file(
|
|
{"goal_src", "kernel", "gcommon.gc"});
|
|
// pretty print it
|
|
auto printed_gcommon = pretty_print::to_string(gcommon_code);
|
|
auto gcommon_code2 = pretty_print::get_pretty_printer_reader()
|
|
.read_from_string(printed_gcommon)
|
|
.as_pair()
|
|
->cdr.as_pair()
|
|
->car;
|
|
auto printed_gcommon2 = pretty_print::to_string(gcommon_code);
|
|
EXPECT_TRUE(gcommon_code == gcommon_code2);
|
|
}
|
|
|
|
TEST(PrettyPrinter, ReadAgainVeryShortLines) {
|
|
// first read the gcommon file
|
|
auto gcommon_code = pretty_print::get_pretty_printer_reader().read_from_file(
|
|
{"goal_src", "kernel", "gcommon.gc"});
|
|
// pretty print it but with a very short line length. This looks terrible but will hopefully
|
|
// hit many of the cases for line breaking.
|
|
auto printed_gcommon = pretty_print::to_string(gcommon_code, 80);
|
|
auto gcommon_code2 = pretty_print::get_pretty_printer_reader()
|
|
.read_from_string(printed_gcommon)
|
|
.as_pair()
|
|
->cdr.as_pair()
|
|
->car;
|
|
auto printed_gcommon2 = pretty_print::to_string(gcommon_code);
|
|
EXPECT_TRUE(gcommon_code == gcommon_code2);
|
|
} |