def TestChildNodeMatchParser():
    assert (isinstance(
        X.child_node_match_parser("(DefineVariable)")[0],
        X.ChildNodeMatchQuery))

    assert (isinstance(
        X.child_node_match_parser("(ForEach@[foo='blah']@{codegroup}[12])")[0],
        X.ChildNodeMatchQuery))

    RaisesSyntaxError(lambda: X.child_node_match_parser("(..)"))

    RaisesSyntaxError(lambda: X.child_node_match_parser("(.)"))

    RaisesSyntaxError(lambda: X.child_node_match_parser("(**)"))
def TestAtomicQueryParser():
  # Test this function rather thoroughly
  assert(isinstance(
    X.atomic_query_parser(".")[0],
    X.DotQuery))

  assert(isinstance(
    X.atomic_query_parser("..")[0],
    X.DotDotQuery))

  assert(isinstance(
    X.atomic_query_parser("*")[0],
    X.StarQuery))

  assert(isinstance(
    X.atomic_query_parser("**")[0],
    X.StarStarQuery))

  assert(isinstance(
    X.child_node_match_parser(
      "(ForEach@[foo='blah']@{codegroup}[12])")[0],
    X.ChildNodeMatchQuery))

  assert(isinstance(
    X.node_query_parser(
      "ForEach@[foo='blah']@{codegroup}[12]")[0],
    X.NodeMatchQuery))

  assert(isinstance(
    X.node_query_parser(
      "ForEach@{codegroup}[12]")[0],
    X.NodeMatchQuery))
def TestChildNodeMatchParser():
  assert(isinstance(
    X.child_node_match_parser("(DefineVariable)")[0],
    X.ChildNodeMatchQuery))

  assert(isinstance(
    X.child_node_match_parser(
      "(ForEach@[foo='blah']@{codegroup}[12])")[0],
    X.ChildNodeMatchQuery))

  RaisesSyntaxError(lambda: X.child_node_match_parser(
    "(..)"))

  RaisesSyntaxError(lambda: X.child_node_match_parser(
    "(.)"))

  RaisesSyntaxError(lambda: X.child_node_match_parser(
    "(**)"))
def TestAtomicQueryParser():
    # Test this function rather thoroughly
    assert (isinstance(X.atomic_query_parser(".")[0], X.DotQuery))

    assert (isinstance(X.atomic_query_parser("..")[0], X.DotDotQuery))

    assert (isinstance(X.atomic_query_parser("*")[0], X.StarQuery))

    assert (isinstance(X.atomic_query_parser("**")[0], X.StarStarQuery))

    assert (isinstance(
        X.child_node_match_parser("(ForEach@[foo='blah']@{codegroup}[12])")[0],
        X.ChildNodeMatchQuery))

    assert (isinstance(
        X.node_query_parser("ForEach@[foo='blah']@{codegroup}[12]")[0],
        X.NodeMatchQuery))

    assert (isinstance(
        X.node_query_parser("ForEach@{codegroup}[12]")[0], X.NodeMatchQuery))