Commit 0fb59c18 authored by Jesse Beder's avatar Jesse Beder
Browse files

Split test struct and handler macros out for the emitter/spec tests

parent 115101d2
......@@ -61,8 +61,10 @@ def gen_tests():
def create_emitter_tests(out):
out.write('namespace %s {\n' % NS)
for test in gen_tests():
out.write('inline TEST %s(YAML::Emitter& out)\n' % test['name'])
tests = list(gen_tests())
for test in tests:
out.write('TEST %s(YAML::Emitter& out)\n' % test['name'])
out.write('{\n')
for event in test['events']:
emit = event['emit']
......@@ -82,5 +84,11 @@ def create_emitter_tests(out):
out.write('}\n')
out.write('void RunGenEmitterTests(int& passed, int& total)\n')
out.write('{\n')
for test in tests:
out.write(' RunGenEmitterTest(&Emitter::%s, %s, passed, total);\n' % (test['name'], encode(test['name'])))
out.write('}\n')
if __name__ == '__main__':
create_emitter_tests(sys.stdout)
#include "tests.h"
#include "handlermacros.h"
#include "yaml-cpp/yaml.h"
#include "yaml-cpp/eventhandler.h"
#include <iostream>
......@@ -1051,7 +1052,37 @@ namespace Test
}
total++;
}
void RunGenEmitterTest(TEST (*test)(YAML::Emitter&), const std::string& name, int& passed, int& total) {
YAML::Emitter out;
TEST ret;
try {
ret = test(out);
} catch(const YAML::Exception& e) {
ret.ok = false;
ret.error = std::string(" Exception caught: ") + e.what();
}
if(!out.good()) {
ret.ok = false;
ret.error = out.GetLastError();
}
if(!ret.ok) {
std::cout << "Generated emitter test failed: " << name << "\n";
std::cout << "Output:\n";
std::cout << out.c_str() << "<<<\n";
std::cout << ret.error << "\n";
}
if(ret.ok)
passed++;
total++;
}
}
#include "genemittertests.h"
bool RunEmitterTests()
{
......@@ -1142,6 +1173,8 @@ namespace Test
RunEmitterErrorTest(&Emitter::InvalidAnchor, "invalid anchor", passed, total);
RunEmitterErrorTest(&Emitter::InvalidAlias, "invalid alias", passed, total);
RunEmitterErrorTest(&Emitter::BadLocalTag, "bad local tag", passed, total);
RunGenEmitterTests(passed, total);
std::cout << "Emitter tests: " << passed << "/" << total << " passed\n";
return passed == total;
......
#include "teststruct.h"
#pragma once
#include "yaml-cpp/yaml.h"
......@@ -5,8 +6,6 @@
#include <string>
#include <cassert>
#define YAML_ASSERT(cond) do { if(!(cond)) return " Assert failed: " #cond; } while(false)
namespace Test {
std::string Quote(const std::string& text) {
YAML::Emitter out;
......
......@@ -5,18 +5,9 @@
#pragma once
#endif
#include <string>
#include "teststruct.h"
namespace Test {
struct TEST {
TEST(): ok(false) {}
TEST(bool ok_): ok(ok_) {}
TEST(const char *error_): ok(false), error(error_) {}
bool ok;
std::string error;
};
namespace Spec {
// 2.1
TEST SeqScalars();
......
#pragma once
#include <string>
#define YAML_ASSERT(cond) do { if(!(cond)) return " Assert failed: " #cond; } while(false)
namespace Test
{
struct TEST {
TEST(): ok(false) {}
TEST(bool ok_): ok(ok_) {}
TEST(const char *error_): ok(false), error(error_) {}
bool ok;
std::string error;
};
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment