Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 39 additions & 4 deletions test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include "simplecpp.h"

#include <cctype>
#include <cstdint>
#include <cstdlib>
#include <cstring>
#include <exception>
Expand All @@ -25,6 +26,15 @@
#define STRINGIZE(x) STRINGIZE_(x)

static const std::string testSourceDir = SIMPLECPP_TEST_SOURCE_DIR;

namespace {
enum class Input : std::uint8_t {
Stringstream,
CharBuffer
};
}

static Input USE_INPUT = Input::Stringstream;
static int numberOfFailedAssertions = 0;

#define ASSERT_EQUALS(expected, actual) (assertEquals((expected), (actual), __LINE__))
Expand All @@ -41,11 +51,21 @@ static std::string pprint(const std::string &in)
return ret;
}

static const char* inputString(Input input) {
switch (input) {
case Input::Stringstream:
return "Stringstream";
case Input::CharBuffer:
return "CharBuffer";
}
return ""; // unreachable - needed for GCC and Visual Studio
}

static int assertEquals(const std::string &expected, const std::string &actual, int line)
{
if (expected != actual) {
numberOfFailedAssertions++;
std::cerr << "------ assertion failed ---------" << std::endl;
std::cerr << "------ assertion failed (" << inputString(USE_INPUT) << ")---------" << std::endl;
std::cerr << "line test.cpp:" << line << std::endl;
std::cerr << "expected:" << pprint(expected) << std::endl;
std::cerr << "actual:" << pprint(actual) << std::endl;
Expand Down Expand Up @@ -83,8 +103,16 @@ static void testcase(const std::string &name, void (*f)(), int argc, char * cons

static simplecpp::TokenList makeTokenList(const char code[], std::size_t size, std::vector<std::string> &filenames, const std::string &filename=std::string(), simplecpp::OutputList *outputList=nullptr)
{
std::istringstream istr(std::string(code, size));
return {istr,filenames,filename,outputList};
switch (USE_INPUT) {
case Input::Stringstream: {
std::istringstream istr(std::string(code, size));
return {istr,filenames,filename,outputList};
}
case Input::CharBuffer:
return {{code, size}, filenames, filename, outputList};
}

return simplecpp::TokenList{filenames}; // unreachable - needed for GCC and Visual Studio
}

static simplecpp::TokenList makeTokenList(const char code[], std::vector<std::string> &filenames, const std::string &filename=std::string(), simplecpp::OutputList *outputList=nullptr)
Expand Down Expand Up @@ -3609,8 +3637,10 @@ static void leak()
}
}

int main(int argc, char **argv)
static void runTests(int argc, char **argv, Input input)
{
USE_INPUT = input;

TEST_CASE(backslash);

TEST_CASE(builtin);
Expand Down Expand Up @@ -3881,6 +3911,11 @@ int main(int argc, char **argv)
TEST_CASE(fuzz_crash);

TEST_CASE(leak);
}

int main(int argc, char **argv)
{
runTests(argc, argv, Input::Stringstream);
runTests(argc, argv, Input::CharBuffer);
return numberOfFailedAssertions > 0 ? EXIT_FAILURE : EXIT_SUCCESS;
}
Loading