test: added QueryTree tests checking correct query syntax

This commit is contained in:
Eberhard Graether
2014-08-31 11:36:08 +02:00
parent c84972b96e
commit aee0b7c337
8 changed files with 392 additions and 14 deletions
-5
View File
@@ -40,11 +40,6 @@ bool QueryCommand::isComplete() const
void QueryCommand::print(std::ostream& ostream) const
{
ostream << m_name;
if (!isComplete())
{
ostream << " INVALID";
}
}
QueryCommand::CommandType QueryCommand::getType() const
+11
View File
@@ -2,6 +2,7 @@
QueryNode::QueryNode()
: m_isGroup(false)
, m_isComplete(true)
{
}
@@ -28,6 +29,11 @@ void QueryNode::print(std::ostream& ostream, int n) const
ostream << ')';
}
if (!m_isComplete || !isComplete())
{
ostream << " INVALID";
}
ostream << '\n';
}
@@ -40,3 +46,8 @@ void QueryNode::setIsGroup(bool isGroup)
{
m_isGroup = isGroup;
}
void QueryNode::setIsComplete(bool isComplete)
{
m_isComplete = isComplete;
}
+3
View File
@@ -21,8 +21,11 @@ public:
bool isGroup() const;
void setIsGroup(bool isGroup);
void setIsComplete(bool isComplete);
private:
bool m_isGroup;
bool m_isComplete;
};
#endif // QUERY_NODE_H
+1 -1
View File
@@ -86,7 +86,7 @@ bool QueryOperator::isComplete() const
void QueryOperator::print(std::ostream& ostream) const
{
ostream << m_type;
ostream << getOperator(m_type);
}
void QueryOperator::print(std::ostream& ostream, int n) const
+20 -6
View File
@@ -45,7 +45,7 @@ void QueryTree::print(std::ostream& ostream) const
if (!m_valid)
{
ostream << " INVALID";
ostream << "INVALID";
}
ostream << '\n';
@@ -61,6 +61,12 @@ std::shared_ptr<QueryNode> QueryTree::buildTree(std::deque<std::string>& tokens,
std::shared_ptr<QueryNode> node = getNextNode(tokens);
std::shared_ptr<QueryOperator> operatorNode = std::dynamic_pointer_cast<QueryOperator>(node);
if (!node)
{
m_valid = false;
return nullptr;
}
if (frontNode)
{
if (node->isComplete())
@@ -109,7 +115,7 @@ std::shared_ptr<QueryNode> QueryTree::buildTree(std::deque<std::string>& tokens,
}
}
if (!node->isComplete())
if (!node || !node->isComplete())
{
m_valid = false;
}
@@ -122,6 +128,8 @@ std::shared_ptr<QueryNode> QueryTree::buildGroup(std::deque<std::string>& tokens
std::deque<std::string> group;
std::string name;
char delimiter = QueryOperator::getOperator(closeType);
bool valid = true;
while (tokens.front() != std::string(1, delimiter) && tokens.size())
{
group.push_back(tokens.front());
@@ -135,6 +143,7 @@ std::shared_ptr<QueryNode> QueryTree::buildGroup(std::deque<std::string>& tokens
}
else
{
valid = false;
m_valid = false;
}
@@ -143,14 +152,18 @@ std::shared_ptr<QueryNode> QueryTree::buildGroup(std::deque<std::string>& tokens
return nullptr;
}
std::shared_ptr<QueryNode> groupNode;
if (closeType == QueryOperator::OPERATOR_NAME)
{
return std::make_shared<QueryToken>(name);
groupNode = std::make_shared<QueryToken>(name);
}
else
{
groupNode = buildTree(group, nullptr);
groupNode->setIsGroup(true);
}
std::shared_ptr<QueryNode> groupNode = buildTree(group, nullptr);
groupNode->setIsGroup(true);
groupNode->setIsComplete(valid);
return groupNode;
}
@@ -195,6 +208,7 @@ std::shared_ptr<QueryNode> QueryTree::createCommand(std::string name)
if (node->getType() == QueryCommand::COMMAND_INVALID)
{
m_valid = false;
return nullptr;
}
return node;
+5 -2
View File
@@ -100,8 +100,11 @@ ContainerType utility::tokenize(const ContainerType& list, const std::string& de
for (std::string str : list)
{
ContainerType c2 = tokenize<ContainerType>(str, delimiter);
c.insert(c.end(), c2.begin(), c2.end());
if (str.size())
{
ContainerType c2 = tokenize<ContainerType>(str, delimiter);
c.insert(c.end(), c2.begin(), c2.end());
}
}
return c;