@@ -1396,6 +1396,72 @@ public void readXMLEditNode() {
13961396 assertEquals ("blue" , blueVertex .value ());
13971397 }
13981398
1399+ /**
1400+ * A couple tests of setting the morpho features on a word using EditNode
1401+ */
1402+ @ Test
1403+ public void readXMLEditNodeMorpho () {
1404+ Ssurgeon inst = Ssurgeon .inst ();
1405+
1406+ String editPattern = String .join (newline ,
1407+ "<ssurgeon-pattern-list>" ,
1408+ " <ssurgeon-pattern>" ,
1409+ " <uid>38</uid>" ,
1410+ " <notes>Edit a node's morpho</notes>" ,
1411+ " <semgrex>" + XMLUtils .escapeXML ("{word:/antennae/}=word" ) + "</semgrex>" ,
1412+ " <edit-list>EditNode -node word -morphofeatures foo=asdf</edit-list>" ,
1413+ " </ssurgeon-pattern>" ,
1414+ "</ssurgeon-pattern-list>" );
1415+
1416+ List <SsurgeonPattern > patterns = inst .readFromString (editPattern );
1417+ assertEquals (patterns .size (), 1 );
1418+ SsurgeonPattern editSsurgeon = patterns .get (0 );
1419+
1420+ SemanticGraph sg = SemanticGraph .valueOf ("[has-2 nsubj> Jennifer-1 obj> [antennae-4 dep> green-3]]" );
1421+ IndexedWord vertex = sg .getNodeByIndexSafe (4 );
1422+ assertEquals (vertex .get (CoreAnnotations .CoNLLUFeats .class ), null );
1423+ assertEquals ("antennae" , vertex .value ());
1424+ SemanticGraph newSG = editSsurgeon .iterate (sg ).first ;
1425+ IndexedWord newVertex = newSG .getNodeByIndexSafe (4 );
1426+ assertSame (vertex , newVertex );
1427+ assertEquals (vertex .get (CoreAnnotations .CoNLLUFeats .class ).toString (), "foo=asdf" );
1428+
1429+ editPattern = String .join (newline ,
1430+ "<ssurgeon-pattern-list>" ,
1431+ " <ssurgeon-pattern>" ,
1432+ " <uid>38</uid>" ,
1433+ " <notes>Edit a node's morpho</notes>" ,
1434+ " <semgrex>" + XMLUtils .escapeXML ("{word:/antennae/}=word" ) + "</semgrex>" ,
1435+ " <edit-list>EditNode -node word -morphofeatures bar=zzzz</edit-list>" ,
1436+ " </ssurgeon-pattern>" ,
1437+ "</ssurgeon-pattern-list>" );
1438+
1439+ patterns = inst .readFromString (editPattern );
1440+ assertEquals (patterns .size (), 1 );
1441+ editSsurgeon = patterns .get (0 );
1442+
1443+ newSG = editSsurgeon .iterate (newSG ).first ;
1444+ assertEquals (vertex .get (CoreAnnotations .CoNLLUFeats .class ).toString (), "bar=zzzz" );
1445+
1446+ editPattern = String .join (newline ,
1447+ "<ssurgeon-pattern-list>" ,
1448+ " <ssurgeon-pattern>" ,
1449+ " <uid>38</uid>" ,
1450+ " <notes>Edit a node's morpho</notes>" ,
1451+ " <semgrex>" + XMLUtils .escapeXML ("{word:/antennae/}=word" ) + "</semgrex>" ,
1452+ " <edit-list>EditNode -node word -morphofeatures foo=asdf|bar=zzzz</edit-list>" ,
1453+ " </ssurgeon-pattern>" ,
1454+ "</ssurgeon-pattern-list>" );
1455+
1456+ patterns = inst .readFromString (editPattern );
1457+ assertEquals (patterns .size (), 1 );
1458+ editSsurgeon = patterns .get (0 );
1459+
1460+ newSG = editSsurgeon .iterate (newSG ).first ;
1461+ // eager test! checking that the features are sorted
1462+ assertEquals (vertex .get (CoreAnnotations .CoNLLUFeats .class ).toString (), "bar=zzzz|foo=asdf" );
1463+ assertEquals (vertex .get (CoreAnnotations .CoNLLUFeats .class ).size (), 2 );
1464+ }
13991465
14001466 /**
14011467 * Put MWT annotations on a couple nodes using EditNode
0 commit comments