Skip to content
Draft
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
52 changes: 48 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 @@ -24,6 +25,13 @@
#define STRINGIZE(x) STRINGIZE_(x)

static const std::string testSourceDir = SIMPLECPP_TEST_SOURCE_DIR;

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 @@ -40,11 +48,27 @@ static std::string pprint(const std::string &in)
return ret;
}

#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4705) // warning C4715: 'inputString': not all control paths return a value
#endif
static const char* inputString(Input input) {
switch (input) {
case Input::Stringstream:
return "Stringstream";
case Input::CharBuffer:
return "CharBuffer";
}
}
#ifdef _MSC_VER
#pragma warning(pop)
#endif

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 @@ -80,11 +104,24 @@ static void testcase(const std::string &name, void (*f)(), int argc, char * cons

#define TEST_CASE(F) (testcase(#F, F, argc, argv))

#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4705) // warning C4715: 'makeTokenList': not all control paths return a value
#endif
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};
}
}
#ifdef _MSC_VER
#pragma warning(pop)
#endif

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 @@ -3525,8 +3562,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 @@ -3793,6 +3832,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