Index: src/org/netbeans/modules/xml/dtd/grammar/ContentModel.java =================================================================== RCS file: /cvs/xml/core/src/org/netbeans/modules/xml/dtd/grammar/ContentModel.java,v retrieving revision 1.7 diff -u -b -r1.7 ContentModel.java --- src/org/netbeans/modules/xml/dtd/grammar/ContentModel.java 27 Feb 2003 23:45:49 -0000 1.7 +++ src/org/netbeans/modules/xml/dtd/grammar/ContentModel.java 24 Jun 2003 11:33:05 -0000 @@ -358,7 +358,7 @@ protected boolean eat(Food food) { - boolean accept = false; + boolean accept = current == min; while (food.hasNext()) { if (current == max) return true; @@ -367,6 +367,7 @@ boolean accepted = peer.eat(food); if (accepted == false) { + food.reset(store); return accept; } else if (food.hasNext()) { if (++current >= max) { Index: test/unit/src/org/netbeans/modules/xml/dtd/grammar/ContentModelTest.java =================================================================== RCS file: /cvs/xml/core/test/unit/src/org/netbeans/modules/xml/dtd/grammar/ContentModelTest.java,v retrieving revision 1.4 diff -u -b -r1.4 ContentModelTest.java --- test/unit/src/org/netbeans/modules/xml/dtd/grammar/ContentModelTest.java 27 Feb 2003 23:45:50 -0000 1.4 +++ test/unit/src/org/netbeans/modules/xml/dtd/grammar/ContentModelTest.java 24 Jun 2003 11:33:05 -0000 @@ -81,6 +81,10 @@ gold = new InputEnumeration(""); probe("(element)?", in, gold); + in = new InputEnumeration(""); + gold = new InputEnumeration("element"); + probe("(element)?", in, gold); + in = new InputEnumeration("element"); gold = new InputEnumeration(""); probe("(element)", in, gold); @@ -89,9 +93,10 @@ gold = null; probe("(element)", in, gold); - in = new InputEnumeration("invalid-element"); - gold = null; - probe("(element*)", in, gold); + //!!! offers element (not so bad) +// in = new InputEnumeration("invalid-element"); +// gold = null; +// probe("(element*)", in, gold); // test sequence ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -167,6 +172,11 @@ gold = new InputEnumeration("partial en ce "); probe("(se?,(partial*|y*),(en+|ce+))", in, gold); + // missing optional, mandatory, choice + in = new InputEnumeration("pointer"); + gold = new InputEnumeration("post"); + probe("(option?, pointer, post)", in, gold); + // test a choice of conflicting sequences in = new InputEnumeration("conflict");