summaryrefslogtreecommitdiff
path: root/test/core/parser/stack/StackTest.cpp
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-02-15 14:58:46 +0100
committerAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-02-15 14:58:46 +0100
commit69ebaddbeaea1aa651a0f0babbf9283240d9c07b (patch)
tree4b590c8ae6e634b8445a2f2d0f580a970bc1b669 /test/core/parser/stack/StackTest.cpp
parent2aced1289813b3dae9c79f3c6878788343e3d997 (diff)
Slightly adapted Handler instances to new Handler, once again passing non-const references to data and start, using "parseGenericString" in DocumentHandler for resolving non-string values, added unit test for testing whether "end()" is not called if "start()" fails.
Diffstat (limited to 'test/core/parser/stack/StackTest.cpp')
-rw-r--r--test/core/parser/stack/StackTest.cpp41
1 files changed, 34 insertions, 7 deletions
diff --git a/test/core/parser/stack/StackTest.cpp b/test/core/parser/stack/StackTest.cpp
index 7cc8bc5..321d471 100644
--- a/test/core/parser/stack/StackTest.cpp
+++ b/test/core/parser/stack/StackTest.cpp
@@ -112,16 +112,21 @@ private:
TestHandler(const HandlerData &handlerData) : Handler(handlerData) {}
public:
- bool start(const Variant::mapType &args)
+ bool start(Variant::mapType &args) override
{
tracker.startCount++;
tracker.startArgs = args;
+ if (!tracker.startResult) {
+ logger().error(
+ "The TestHandler was told not to allow a field start. So it "
+ "doesn't. The TestHandler always obeys its master.");
+ }
return tracker.startResult;
}
- void end() { tracker.endCount++; }
+ void end() override { tracker.endCount++; }
- bool fieldStart(bool &isDefault, size_t fieldIdx)
+ bool fieldStart(bool &isDefault, size_t fieldIdx) override
{
tracker.fieldStartCount++;
tracker.fieldStartIsDefault = isDefault;
@@ -132,9 +137,10 @@ public:
return tracker.fieldStartResult;
}
- void fieldEnd() { tracker.fieldEndCount++; }
+ void fieldEnd() override { tracker.fieldEndCount++; }
- bool annotationStart(const Variant &className, const Variant::mapType &args)
+ bool annotationStart(const Variant &className,
+ Variant::mapType &args) override
{
tracker.annotationStartCount++;
tracker.annotationStartClassName = className;
@@ -142,7 +148,8 @@ public:
return tracker.annotationStartResult;
}
- bool annotationEnd(const Variant &className, const Variant &elementName)
+ bool annotationEnd(const Variant &className,
+ const Variant &elementName) override
{
tracker.annotationEndCount++;
tracker.annotationEndClassName = className;
@@ -150,7 +157,7 @@ public:
return tracker.annotationEndResult;
}
- bool data(const Variant &data)
+ bool data(Variant &data) override
{
tracker.dataCount++;
tracker.dataData = data;
@@ -458,6 +465,26 @@ TEST(Stack, noImplicitDefaultFieldIfDefaultFieldGiven)
ASSERT_FALSE(logger.hasError());
}
+TEST(Stack, noEndIfStartFails)
+{
+ tracker.reset();
+ logger.reset();
+ {
+ Stack s{env.context, States::AnyHandlers};
+
+ s.command("a", {});
+ tracker.expect(1, 0, 0, 0, 0, 0, 0); // sc, ec, fsc, fse, asc, aec, dc
+ ASSERT_EQ("a", s.currentCommandName());
+
+ tracker.startResult = false;
+ s.command("b", {});
+ tracker.expect(3, 1, 1, 1, 0, 0, 0); // sc, ec, fsc, fse, asc, aec, dc
+ ASSERT_EQ("b", s.currentCommandName());
+ }
+ tracker.expect(3, 1, 1, 1, 0, 0, 0); // sc, ec, fsc, fse, asc, aec, dc
+ ASSERT_TRUE(logger.hasError());
+}
+
TEST(Stack, implicitDefaultFieldOnData)
{
tracker.reset();