From 08baae465a5a0d090364f84dc176d6258c98c0a5 Mon Sep 17 00:00:00 2001 From: Jason Orendorff Date: Fri, 25 Oct 2013 02:04:22 -0700 Subject: [PATCH] Add unit tests for StringReader. You can run them with `./kraken --test`. --- include/StringReader.h | 2 ++ main.cpp | 8 ++++++-- src/StringReader.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 2 deletions(-) diff --git a/include/StringReader.h b/include/StringReader.h index 6e79a5d..f25bfec 100644 --- a/include/StringReader.h +++ b/include/StringReader.h @@ -16,6 +16,8 @@ class StringReader std::string line(bool truncateEnd = true); std::string getTokens(std::vector get_chars, bool truncateEnd = true); std::string truncateEnd(std::string to_truncate); + + static void test(); protected: private: std::string rd_string; diff --git a/main.cpp b/main.cpp index 275c452..13d60c9 100644 --- a/main.cpp +++ b/main.cpp @@ -17,7 +17,11 @@ int main(int argc, char* argv[]) { - + if (argc == 2 && std::string(argv[1]) == "--test") { + StringReader::test(); + return 0; + } + std::ifstream programInFile, grammerInFile; std::ofstream outFile, outFileTransformed, outFileAST; @@ -144,4 +148,4 @@ int main(int argc, char* argv[]) { return(0); } - \ No newline at end of file + diff --git a/src/StringReader.cpp b/src/StringReader.cpp index 2675a9a..70fbced 100644 --- a/src/StringReader.cpp +++ b/src/StringReader.cpp @@ -1,4 +1,5 @@ #include "StringReader.h" +#include StringReader::StringReader() { @@ -144,3 +145,48 @@ std::string StringReader::truncateEnd(std::string to_truncate) to_return = to_return + to_truncate[i]; return to_return; } + +void StringReader::test() +{ + { + StringReader reader("\"x\""); + assert(reader.word() == "\"x\""); + assert(reader.word() == ""); + } + + { + StringReader reader("\"y\" ;\n"); + assert(reader.word() == "\"y\""); + assert(reader.word() == ";"); + assert(reader.word() == ""); + } + + { + StringReader reader("Goal = greeting ;\n" + "greeting = \"hello\" | greeting \"world\" ;\n"); + assert(reader.word() == "Goal"); + assert(reader.word() == "="); + assert(reader.word() == "greeting"); + assert(reader.word() == ";"); + assert(reader.word() == "greeting"); + assert(reader.word() == "="); + assert(reader.word() == "\"hello\""); + assert(reader.word() == "|"); + assert(reader.word() == "greeting"); + assert(reader.word() == "\"world\""); + assert(reader.word() == ";"); + assert(reader.word() == ""); + } + + { + StringReader reader("one # pretend this is a comment\n" + " two\n"); + assert(reader.word() == "one"); + assert(reader.word() == "#"); + assert(reader.line() == "pretend this is a comment"); + assert(reader.word() == "two"); + assert(reader.word() == ""); + } + + std::cout << "StringReader tests pass\n"; +}