summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-04-13 01:30:57 +0200
committerAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2016-04-25 22:24:17 +0200
commit87dfa67b5ac95e1f41cb2be3507cc47da26caef0 (patch)
tree19f4ec85e46a6741a48cc69c32e4622bb631b86c
parent57b738e0008ca7ba0a6cf17d746a3ea2e389d20b (diff)
Adapt isNamespacededIdentifier to most recent identifier format
-rw-r--r--src/core/common/Utils.cpp8
-rw-r--r--src/core/common/Utils.hpp3
-rw-r--r--test/core/common/UtilsTest.cpp2
-rw-r--r--test/core/parser/stack/StackTest.cpp10
4 files changed, 17 insertions, 6 deletions
diff --git a/src/core/common/Utils.cpp b/src/core/common/Utils.cpp
index 67920c2..f665db5 100644
--- a/src/core/common/Utils.cpp
+++ b/src/core/common/Utils.cpp
@@ -47,16 +47,18 @@ bool Utils::isIdentifierOrEmpty(const std::string &name)
bool Utils::isNamespacedIdentifier(const std::string &name)
{
bool first = true;
- for (char c : name) {
+ for (size_t i = 0; i < name.size(); i++) {
+ const char c = name[i];
if (first && !isIdentifierStartCharacter(c)) {
return false;
}
- if (!first && (!isIdentifierCharacter(c) && c != ':')) {
+ if (!first && (!(isIdentifierCharacter(c) || c == ':') ||
+ (c == ':' && !isIdentifierEndCharacter(name[i - 1])))) {
return false;
}
first = (c == ':');
}
- return !first;
+ return !first && isIdentifierEndCharacter(name.back());
}
bool Utils::hasNonWhitepaceChar(const std::string &s)
diff --git a/src/core/common/Utils.hpp b/src/core/common/Utils.hpp
index c3b49a0..16bc5a1 100644
--- a/src/core/common/Utils.hpp
+++ b/src/core/common/Utils.hpp
@@ -101,7 +101,8 @@ public:
/**
* Returns true if the given string is in
* \code{.txt}
- * ([A-Za-z][A-Za-z0-9_-]*)(:[A-Za-z][A-Za-z0-9_-]*)*
+ * ([A-Za-z]([A-Za-z0-9_-][A-Za-z0-9])?)
+ * (:[A-Za-z]([A-Za-z0-9_-][A-Za-z0-9])?)*
* \endCode
*
* @param name is the string that should be tested.
diff --git a/test/core/common/UtilsTest.cpp b/test/core/common/UtilsTest.cpp
index f1a9af3..1f42f60 100644
--- a/test/core/common/UtilsTest.cpp
+++ b/test/core/common/UtilsTest.cpp
@@ -51,7 +51,9 @@ TEST(Utils, isNamespacedIdentifier)
EXPECT_TRUE(Utils::isNamespacedIdentifier("t0-_est:b"));
EXPECT_TRUE(Utils::isNamespacedIdentifier("test:test"));
EXPECT_TRUE(Utils::isNamespacedIdentifier("t0-_est:t0-_est"));
+ EXPECT_FALSE(Utils::isNamespacedIdentifier("test_"));
EXPECT_FALSE(Utils::isNamespacedIdentifier("test:_A"));
+ EXPECT_FALSE(Utils::isNamespacedIdentifier("test_:A"));
EXPECT_FALSE(Utils::isNamespacedIdentifier("test::a"));
EXPECT_FALSE(Utils::isNamespacedIdentifier(":test"));
EXPECT_FALSE(Utils::isNamespacedIdentifier("t0-_est:_t0-_EST"));
diff --git a/test/core/parser/stack/StackTest.cpp b/test/core/parser/stack/StackTest.cpp
index ff13713..194746e 100644
--- a/test/core/parser/stack/StackTest.cpp
+++ b/test/core/parser/stack/StackTest.cpp
@@ -408,13 +408,13 @@ TEST(Stack, invalidCommandName)
s.fieldEnd();
tracker.expect(1, 0, 1, 1, 0); // scc, ec, fsc, fec, dc, sac, stc, etc
- s.commandStart("a_", {});
+ s.commandStart("b", {});
tracker.expect(2, 1, 1, 1, 0); // scc, ec, fsc, fec, dc, sac, stc, etc
s.fieldStart(true);
s.fieldEnd();
tracker.expect(2, 1, 2, 2, 0); // scc, ec, fsc, fec, dc, sac, stc, etc
- s.commandStart("a_:b", {});
+ s.commandStart("a:b", {});
tracker.expect(3, 2, 2, 2, 0); // scc, ec, fsc, fec, dc, sac, stc, etc
s.fieldStart(true);
s.fieldEnd();
@@ -423,6 +423,12 @@ TEST(Stack, invalidCommandName)
ASSERT_THROW(s.commandStart("_a", {}), LoggableException);
tracker.expect(3, 3, 3, 3, 0); // scc, ec, fsc, fec, dc, sac, stc, etc
+ ASSERT_THROW(s.commandStart("a_", {}), LoggableException);
+ tracker.expect(3, 3, 3, 3, 0); // scc, ec, fsc, fec, dc, sac, stc, etc
+
+ ASSERT_THROW(s.commandStart("a_:b", {}), LoggableException);
+ tracker.expect(3, 3, 3, 3, 0); // scc, ec, fsc, fec, dc, sac, stc, etc
+
ASSERT_THROW(s.commandStart("a:", {}), LoggableException);
tracker.expect(3, 3, 3, 3, 0); // scc, ec, fsc, fec, dc, sac, stc, etc