Skip to content

Commit

Permalink
[test] Add new tests found in reference
Browse files Browse the repository at this point in the history
  • Loading branch information
gabriele-tomassetti authored and adamretter committed Oct 14, 2023
1 parent ac7e942 commit a0ec78a
Showing 1 changed file with 155 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ public void transformWith() throws EXistException, RecognitionException, XPathEx
public void copyModifyExprTest() throws EXistException, RecognitionException, XPathException, TokenStreamException, PermissionDeniedException
{
String query = "copy $je := $e\n" +
" modify $je\n" +
" modify delete node $je/salary\n" +
" return $je";

BrokerPool pool = BrokerPool.getInstance();
Expand All @@ -264,11 +264,50 @@ public void copyModifyExprTest() throws EXistException, RecognitionException, XP

XQueryTreeParser treeParser = new XQueryTreeParser(context);
PathExpr expr = new PathExpr(context);
treeParser.expr(ast, expr);
Expression ret = treeParser.expr(ast, expr);
if (treeParser.foundErrors()) {
fail(treeParser.getErrorMessage());
return;
}

assertTrue(ret instanceof CopyModifyExpression);
assertEquals("$je",((CopyModifyExpression) ret).getReturnExpr().toString());
}
}

@Test
public void copyModifyExprTestComplexModify() throws EXistException, RecognitionException, XPathException, TokenStreamException, PermissionDeniedException
{
String query = "copy $newx := $oldx\n" +
" modify (rename node $newx as \"newx\", \n" +
" replace value of node $newx with $newx * 2)\n" +
" return ($oldx, $newx)";

BrokerPool pool = BrokerPool.getInstance();
try(final DBBroker broker = pool.getBroker()) {
// parse the query into the internal syntax tree
XQueryContext context = new XQueryContext(broker.getBrokerPool());
XQueryLexer lexer = new XQueryLexer(context, new StringReader(query));
XQueryParser xparser = new XQueryParser(lexer);
xparser.expr();
if (xparser.foundErrors()) {
fail(xparser.getErrorMessage());
return;
}

XQueryAST ast = (XQueryAST) xparser.getAST();

XQueryTreeParser treeParser = new XQueryTreeParser(context);
PathExpr expr = new PathExpr(context);
Expression ret = treeParser.expr(ast, expr);
if (treeParser.foundErrors()) {
fail(treeParser.getErrorMessage());
return;
}

assertTrue(ret instanceof CopyModifyExpression);
assertEquals("( replace $newx \"newx\", replace $newx VALUE $newx * 2 )",((CopyModifyExpression) ret).getModifyExpr().toString());
assertEquals("( $oldx, $newx )",((CopyModifyExpression) ret).getReturnExpr().toString());
}
}

Expand Down Expand Up @@ -339,6 +378,48 @@ public void insertExpr() throws EXistException, RecognitionException, XPathExcep

assertTrue(expr.getFirst() instanceof InsertExpr);
assertEquals(Expression.Category.UPDATING, expr.getFirst().getCategory());
assertEquals(InsertExpr.Choice.AFTER, ((InsertExpr) expr.getFirst()).getChoice());
}
}

@Test
public void insertExprAsLast() throws EXistException, RecognitionException, XPathException, TokenStreamException, PermissionDeniedException
{
String query =
"insert node $new-police-report\n" +
" as last into fn:doc(\"insurance.xml\")/policies\n" +
" /policy[id = $pid]\n" +
" /driver[license = $license]\n" +
" /accident[date = $accdate]\n" +
" /police-reports";

BrokerPool pool = BrokerPool.getInstance();
try(final DBBroker broker = pool.getBroker()) {
// parse the query into the internal syntax tree
XQueryContext context = new XQueryContext(broker.getBrokerPool());
XQueryLexer lexer = new XQueryLexer(context, new StringReader(query));
XQueryParser xparser = new XQueryParser(lexer);
xparser.expr();
if (xparser.foundErrors()) {
fail(xparser.getErrorMessage());
return;
}

XQueryAST ast = (XQueryAST) xparser.getAST();

XQueryTreeParser treeParser = new XQueryTreeParser(context);
PathExpr expr = new PathExpr(context);
treeParser.expr(ast, expr);

if (treeParser.foundErrors()) {
fail(treeParser.getErrorMessage());
return;
}

assertTrue(expr.getFirst() instanceof InsertExpr);
assertEquals(Expression.Category.UPDATING, expr.getFirst().getCategory());
assertEquals("$new-police-report", ((InsertExpr) expr.getFirst()).getSourceExpr().toString());
assertEquals(InsertExpr.Choice.LAST, ((InsertExpr) expr.getFirst()).getChoice());
}
}

Expand All @@ -348,6 +429,42 @@ public void deleteExpr() throws EXistException, RecognitionException, XPathExcep
String query =
"delete node fn:doc(\"bib.xml\")/books/book[1]/author[last()]";

BrokerPool pool = BrokerPool.getInstance();
try(final DBBroker broker = pool.getBroker()) {
// parse the query into the internal syntax tree
XQueryContext context = new XQueryContext(broker.getBrokerPool());
XQueryLexer lexer = new XQueryLexer(context, new StringReader(query));
XQueryParser xparser = new XQueryParser(lexer);
xparser.expr();
if (xparser.foundErrors()) {
fail(xparser.getErrorMessage());
return;
}

XQueryAST ast = (XQueryAST) xparser.getAST();

XQueryTreeParser treeParser = new XQueryTreeParser(context);
PathExpr expr = new PathExpr(context);
treeParser.expr(ast, expr);

if (treeParser.foundErrors()) {
fail(treeParser.getErrorMessage());
return;
}

assertTrue(expr.getFirst() instanceof DeleteExpr);
assertEquals(Expression.Category.UPDATING, expr.getFirst().getCategory());
assertEquals("doc(\"bib.xml\")/child::{}books/child::{}book[1]/child::{}author[last()]", ((DeleteExpr) expr.getFirst()).getTargetExpr().toString());
}
}

@Test
public void deleteExprComplex() throws EXistException, RecognitionException, XPathException, TokenStreamException, PermissionDeniedException
{
String query =
"delete nodes /email/message\n" +
" [date > xs:dayTimeDuration(\"P365D\")]";

BrokerPool pool = BrokerPool.getInstance();
try(final DBBroker broker = pool.getBroker()) {
// parse the query into the internal syntax tree
Expand Down Expand Up @@ -485,4 +602,40 @@ public void renameExpr() throws EXistException, RecognitionException, XPathExcep
assertEquals("\"principal-author\"",((RenameExpr) expr.getFirst()).getNewNameExpr().toString());
}
}

@Test
public void renameExprWithExpr() throws EXistException, RecognitionException, XPathException, TokenStreamException, PermissionDeniedException
{
String query =
"rename node fn:doc(\"bib.xml\")/books/book[1]/author[1]\n" +
"as $newname";

BrokerPool pool = BrokerPool.getInstance();
try(final DBBroker broker = pool.getBroker()) {
// parse the query into the internal syntax tree
XQueryContext context = new XQueryContext(broker.getBrokerPool());
XQueryLexer lexer = new XQueryLexer(context, new StringReader(query));
XQueryParser xparser = new XQueryParser(lexer);
xparser.expr();
if (xparser.foundErrors()) {
fail(xparser.getErrorMessage());
return;
}

XQueryAST ast = (XQueryAST) xparser.getAST();

XQueryTreeParser treeParser = new XQueryTreeParser(context);
PathExpr expr = new PathExpr(context);
treeParser.expr(ast, expr);

if (treeParser.foundErrors()) {
fail(treeParser.getErrorMessage());
return;
}

assertTrue(expr.getFirst() instanceof RenameExpr);
assertEquals("doc(\"bib.xml\")/child::{}books/child::{}book[1]/child::{}author[1]",((RenameExpr) expr.getFirst()).getTargetExpr().toString());
assertEquals("$newname",((RenameExpr) expr.getFirst()).getNewNameExpr().toString());
}
}
}

0 comments on commit a0ec78a

Please sign in to comment.