public void testQueryConstructor(){
        try{
            try{
                createQuery("");
                assertTrue(false);
            }catch(ParserException e){
                assertTrue(true);
            };

            try{
                createQuery("==(A,B,C");
                assertTrue(false);
            }catch(ParserException e){
                assertTrue(true);
            };

            try{
                createQuery("A(");
                assertTrue(false);
            }catch(ParserException e){
                assertTrue(true);
            };

            try{
                createQuery("A()");
                assertTrue(false);
            }catch(ParserException e){
                assertTrue(true);
            };

            try{
                createQuery("A(A B)");
                assertTrue(false);
            }catch(ParserException e){
                assertTrue(true);
            };

            try{
                createQuery("A('A' B)");
                assertTrue(false);
            }catch(ParserException e){
                assertTrue(true);
            };

            try{
                createQuery("A(X,)");
                assertTrue(false);
            }catch(ParserException e){
                assertTrue(true);
            };

            try{
                createQuery("A(X,Y)");
                assertTrue(false);
            }catch(ParserException e){
                assertTrue(true);
            };

            StringReader sr = new StringReader("Apple(Id1)?");
            Lex lex = new Lex(sr);
            ExtendedQuery query = new ExtendedQuery(lex);
            assertTrue(query.toString().equals("Apple(Id1)? No\n"));

            query = createQuery("Apple(Id1)?");
            assertTrue(query.getNodes().size() == 1);
            ArrayList<Node> nodes =
                ((Predicate)query.getNodes().get(0)).getNodes();
            assertTrue(nodes.get(0) instanceof Argument);
            assertTrue(((Token)nodes.get(0)).getValue().equals("Id1"));
            assertTrue(query.toString().equals("Apple(Id1)? No\n"));

            query = createQuery("Apple('Id1')?");
            assertTrue(query.getNodes().size() == 1);
            nodes = ((Predicate)query.getNodes().get(0)).getNodes();
            assertTrue(nodes.get(0) instanceof Argument);
            assertTrue(((Token)nodes.get(0)).getValue().equals("'Id1'"));
            assertTrue(query.toString().equals("Apple('Id1')? No\n"));

            query = createQuery("M(Id1,\n Id2)?");
            assertTrue(query.getNodes().size() == 1);
            nodes = ((Predicate)query.getNodes().get(0)).getNodes();
            assertTrue(nodes.size() == 2);
            assertTrue(nodes.get(0) instanceof Argument);
            assertTrue(nodes.get(1) instanceof Argument);
            assertTrue(((Token)nodes.get(0)).getValue().equals("Id1"));
            assertTrue(((Token)nodes.get(1)).getValue().equals("Id2"));
            assertTrue(query.toString().equals(
                "M(Id1,Id2)? No\n"));

            query = createQuery("M(Id1,\n 'Id2')?");
            assertTrue(query.getNodes().size() == 1);
            nodes = ((Predicate)query.getNodes().get(0)).getNodes();
            assertTrue(nodes.size() == 2);
            assertTrue(nodes.get(0) instanceof Argument);
            assertTrue(nodes.get(1) instanceof Argument);
            assertTrue(((Token)nodes.get(0)).getValue().equals("Id1"));
            assertTrue(((Token)nodes.get(1)).getValue().equals("'Id2'"));
            assertTrue(query.toString().equals("M(Id1,'Id2')? No\n"));

            query = createQuery("M('Id1',\n Id2)?");
            assertTrue(query.getNodes().size() == 1);
            nodes = ((Predicate)query.getNodes().get(0)).getNodes();
            assertTrue(nodes.size() == 2);
            assertTrue(nodes.get(0) instanceof Argument);
            assertTrue(nodes.get(1) instanceof Argument);
            assertTrue(((Token)nodes.get(0)).getValue().equals("'Id1'"));
            assertTrue(((Token)nodes.get(1)).getValue().equals("Id2"));
            assertTrue(query.toString().equals(
                "M('Id1',Id2)? No\n"));

            query = createQuery("M('Id1',\n 'Id2')?");
            assertTrue(query.getNodes().size() == 1);
            nodes = ((Predicate)query.getNodes().get(0)).getNodes();
            assertTrue(nodes.size() == 2);
            assertTrue(nodes.get(0) instanceof Argument);
            assertTrue(nodes.get(1) instanceof Argument);
            assertTrue(((Token)nodes.get(0)).getValue().equals("'Id1'"));
            assertTrue(((Token)nodes.get(1)).getValue().equals("'Id2'"));
            assertTrue(query.toString().equals("M('Id1','Id2')? No\n"));

            query = createQuery("List(Name1,\n Name2,\n Name3)?");
            assertTrue(query.getNodes().size() == 1);
            nodes = ((Predicate)query.getNodes().get(0)).getNodes();
            assertTrue(nodes.size() == 3);
            assertTrue(nodes.get(0) instanceof Argument);
            assertTrue(nodes.get(1) instanceof Argument);
            assertTrue(nodes.get(2) instanceof Argument);
            assertTrue(((Token)nodes.get(0)).getValue().equals("Name1"));
            assertTrue(((Token)nodes.get(1)).getValue().equals("Name2"));
            assertTrue(((Token)nodes.get(2)).getValue().equals("Name3"));
            assertTrue(query.toString().equals(
               "List(Name1,Name2,Name3)? No\n"));

            query = createQuery("List(Name1,\n Name2,\n 'Name3')\t?");
            assertTrue(query.getNodes().size() == 1);
            nodes = ((Predicate)query.getNodes().get(0)).getNodes();
            assertTrue(nodes.size() == 3);
            assertTrue(nodes.get(0) instanceof Argument);
            assertTrue(nodes.get(1) instanceof Argument);
            assertTrue(nodes.get(2) instanceof Argument);
            assertTrue(((Token)nodes.get(0)).getValue().equals("Name1"));
            assertTrue(((Token)nodes.get(1)).getValue().equals("Name2"));
            assertTrue(((Token)nodes.get(2)).getValue().equals("'Name3'"));
            assertTrue(query.toString().equals(
               "List(Name1,Name2,'Name3')? No\n"));

            query = createQuery("List(Name1,\n 'Name2',\n Name3)\n?");
            assertTrue(query.getNodes().size() == 1);
            nodes = ((Predicate)query.getNodes().get(0)).getNodes();
            assertTrue(nodes.size() == 3);
            assertTrue(nodes.get(0) instanceof Argument);
            assertTrue(nodes.get(1) instanceof Argument);
            assertTrue(nodes.get(2) instanceof Argument);
            assertTrue(((Token)nodes.get(0)).getValue().equals("Name1"));
            assertTrue(((Token)nodes.get(1)).getValue().equals("'Name2'"));
            assertTrue(((Token)nodes.get(2)).getValue().equals("Name3"));
            assertTrue(query.toString().equals(
               "List(Name1,'Name2',Name3)? No\n"));

            query = createQuery("List(Name1,\n 'Name2',\n 'Name3') ? ");
            assertTrue(query.getNodes().size() == 1);
            nodes = ((Predicate)query.getNodes().get(0)).getNodes();
            assertTrue(nodes.size() == 3);
            assertTrue(nodes.get(0) instanceof Argument);
            assertTrue(nodes.get(1) instanceof Argument);
            assertTrue(nodes.get(2) instanceof Argument);
            assertTrue(((Token)nodes.get(0)).getValue().equals("Name1"));
            assertTrue(((Token)nodes.get(1)).getValue().equals("'Name2'"));
            assertTrue(((Token)nodes.get(2)).getValue().equals("'Name3'"));
            assertTrue(query.toString().equals(
               "List(Name1,'Name2','Name3')? No\n"));

            query = createQuery("List('Name1',\n Name2,\n Name3)?");
            assertTrue(query.getNodes().size() == 1);
            nodes = ((Predicate)query.getNodes().get(0)).getNodes();
            assertTrue(nodes.size() == 3);
            assertTrue(nodes.get(0) instanceof Argument);
            assertTrue(nodes.get(1) instanceof Argument);
            assertTrue(nodes.get(2) instanceof Argument);
            assertTrue(((Token)nodes.get(0)).getValue().equals("'Name1'"));
            assertTrue(((Token)nodes.get(1)).getValue().equals("Name2"));
            assertTrue(((Token)nodes.get(2)).getValue().equals("Name3"));
            assertTrue(query.toString().equals(
               "List('Name1',Name2,Name3)? No\n"));

            query = createQuery("List('Name1',\n Name2,\n 'Name3')?");
            assertTrue(query.getNodes().size() == 1);
            nodes = ((Predicate)query.getNodes().get(0)).getNodes();
            assertTrue(nodes.size() == 3);
            assertTrue(nodes.get(0) instanceof Argument);
            assertTrue(nodes.get(1) instanceof Argument);
            assertTrue(nodes.get(2) instanceof Argument);
            assertTrue(((Token)nodes.get(0)).getValue().equals("'Name1'"));
            assertTrue(((Token)nodes.get(1)).getValue().equals("Name2"));
            assertTrue(((Token)nodes.get(2)).getValue().equals("'Name3'"));
            assertTrue(query.toString().equals(
               "List('Name1',Name2,'Name3')? No\n"));

            query = createQuery("List('Name1',\n 'Name2',\n Name3)?");
            assertTrue(query.getNodes().size() == 1);
            nodes = ((Predicate)query.getNodes().get(0)).getNodes();
            assertTrue(nodes.size() == 3);
            assertTrue(nodes.get(0) instanceof Argument);
            assertTrue(nodes.get(1) instanceof Argument);
            assertTrue(nodes.get(2) instanceof Argument);
            assertTrue(((Token)nodes.get(0)).getValue().equals("'Name1'"));
            assertTrue(((Token)nodes.get(1)).getValue().equals("'Name2'"));
            assertTrue(((Token)nodes.get(2)).getValue().equals("Name3"));
            assertTrue(query.toString().equals(
               "List('Name1','Name2',Name3)? No\n"));

            query = createQuery("List('Name1',\n 'Name2',\n 'Name3')?");
            assertTrue(query.getNodes().size() == 1);
            nodes = ((Predicate)query.getNodes().get(0)).getNodes();
            assertTrue(nodes.size() == 3);
            assertTrue(nodes.get(0) instanceof Argument);
            assertTrue(nodes.get(1) instanceof Argument);
            assertTrue(nodes.get(2) instanceof Argument);
            assertTrue(((Token)nodes.get(0)).getValue().equals("'Name1'"));
            assertTrue(((Token)nodes.get(1)).getValue().equals("'Name2'"));
            assertTrue(((Token)nodes.get(2)).getValue().equals("'Name3'"));
            assertTrue(query.toString().equals(
               "List('Name1','Name2','Name3')? No\n"));
        }catch(ParserException e){
            System.out.println(
                "ERROR in QueryTest.testQueryConstructor\n"+
                "    should not get here.\n" +
                "    error = " + e.getMessage());
        };
    }