### Eclipse Workspace Patch 1.0 #P ivy Index: test/java/org/apache/ivy/osgi/obr/RequirementFilterTest.java =================================================================== --- test/java/org/apache/ivy/osgi/obr/RequirementFilterTest.java (revision 1226964) +++ test/java/org/apache/ivy/osgi/obr/RequirementFilterTest.java (working copy) @@ -25,6 +25,7 @@ import org.apache.ivy.osgi.obr.filter.AndFilter; import org.apache.ivy.osgi.obr.filter.CompareFilter; import org.apache.ivy.osgi.obr.filter.CompareFilter.Operator; +import org.apache.ivy.osgi.obr.filter.NotFilter; import org.apache.ivy.osgi.obr.filter.RequirementFilterParser; import org.apache.ivy.osgi.obr.xml.RequirementFilter; @@ -38,16 +39,22 @@ checkParse(cgt2, "(c>2)"); RequirementFilter twoeqd = new CompareFilter("2", Operator.EQUALS, "d"); checkParse(twoeqd, "(2=d)"); - RequirementFilter foodorbarge0dot0 = new CompareFilter("foo.bar", + RequirementFilter foodotbarge0dot0 = new CompareFilter("foo.bar", Operator.GREATER_OR_EQUAL, "0.0"); - checkParse(foodorbarge0dot0, "(foo.bar>=0.0)"); - RequirementFilter and = new AndFilter(new RequirementFilter[] {foodorbarge0dot0}); + checkParse(foodotbarge0dot0, "(foo.bar>=0.0)"); + RequirementFilter and = new AndFilter(new RequirementFilter[] {foodotbarge0dot0}); checkParse(and, "(&(foo.bar>=0.0))"); - RequirementFilter and2 = new AndFilter(new RequirementFilter[] {cgt2, twoeqd, - foodorbarge0dot0}); + RequirementFilter and2 = new AndFilter(new RequirementFilter[] {cgt2, twoeqd, foodotbarge0dot0}); checkParse(and2, "(&(c>2)(2=d)(foo.bar>=0.0))"); RequirementFilter spaceAfterAnd = new AndFilter(new RequirementFilter[] {twoeqd}); checkParse(spaceAfterAnd, "(& (2=d))"); + + RequirementFilter version350 = new CompareFilter("version", Operator.GREATER_OR_EQUAL, "3.5.0"); + RequirementFilter version400 = new CompareFilter("version", Operator.GREATER_OR_EQUAL, "4.0.0"); + RequirementFilter notVersion400 = new NotFilter(version400); + RequirementFilter bundle = new CompareFilter("bundle", Operator.EQUALS, "org.eclipse.core.runtime"); + RequirementFilter andEverythingWithSpace = new AndFilter(new RequirementFilter[] {version350, notVersion400, bundle}); + checkParse(andEverythingWithSpace, "(& (version>=3.5.0) (!(version>=4.0.0)) (bundle=org.eclipse.core.runtime) )"); } private void assertParseFail(String toParse) { @@ -61,6 +68,6 @@ private void checkParse(RequirementFilter expected, String toParse) throws ParseException { RequirementFilter parsed = RequirementFilterParser.parse(toParse); - Assert.assertEquals(expected, parsed); + Assert.assertEquals(expected.toString(), parsed.toString()); } } Index: src/java/org/apache/ivy/osgi/obr/filter/RequirementFilterParser.java =================================================================== --- src/java/org/apache/ivy/osgi/obr/filter/RequirementFilterParser.java (revision 1226964) +++ src/java/org/apache/ivy/osgi/obr/filter/RequirementFilterParser.java (working copy) @@ -191,7 +191,11 @@ throw new ParseException("The ! operator is expecting a filter", pos); } unread(); - return new NotFilter(parseFilter()); + NotFilter notFilter = new NotFilter(parseFilter()); + if (c == ')') { + readNext(); + } + return notFilter; } private void skipWhiteSpace() {