diff --git a/src/main/java/com/github/zafarkhaja/semver/VersionParser.java b/src/main/java/com/github/zafarkhaja/semver/VersionParser.java index 1911e61..25d1c5f 100644 --- a/src/main/java/com/github/zafarkhaja/semver/VersionParser.java +++ b/src/main/java/com/github/zafarkhaja/semver/VersionParser.java @@ -26,6 +26,7 @@ package com.github.zafarkhaja.semver; import com.github.zafarkhaja.semver.util.Stream; import com.github.zafarkhaja.semver.util.UnexpectedElementException; import java.util.ArrayList; +import java.util.EnumSet; import java.util.List; import static com.github.zafarkhaja.semver.VersionParser.CharType.*; @@ -111,6 +112,21 @@ class VersionParser implements Parser { public boolean isMatchedBy(Character chr) { return chr == null; } + }, + ILLEGAL { + /** + * {@inheritDoc} + */ + @Override + public boolean isMatchedBy(Character chr) { + EnumSet itself = EnumSet.of(ILLEGAL); + for (CharType type : EnumSet.complementOf(itself)) { + if (type.isMatchedBy(chr)) { + return false; + } + } + return true; + } }; } diff --git a/src/test/java/com/github/zafarkhaja/semver/VersionParserCharTypeTest.java b/src/test/java/com/github/zafarkhaja/semver/VersionParserCharTypeTest.java index a979436..4eb4d0d 100644 --- a/src/test/java/com/github/zafarkhaja/semver/VersionParserCharTypeTest.java +++ b/src/test/java/com/github/zafarkhaja/semver/VersionParserCharTypeTest.java @@ -80,4 +80,12 @@ public class VersionParserCharTypeTest { assertFalse(EOL.isMatchedBy('a')); assertFalse(EOL.isMatchedBy('0')); } + + @Test + public void shouldBeMatchedByIllegal() { + assertTrue(ILLEGAL.isMatchedBy('!')); + assertFalse(ILLEGAL.isMatchedBy('-')); + assertFalse(ILLEGAL.isMatchedBy('a')); + assertFalse(ILLEGAL.isMatchedBy('0')); + } }