assertFalse(pattern.matches("RECORD<{othernamespace}foo>"));
}
@Test
public void testArgumentWildcards() throws Exception {
TypePattern pattern = new TypePattern("LIST<STRING>");
assertTrue(pattern.matches("LIST<STRING>"));
assertFalse(pattern.matches("LIST<LONG>"));
assertFalse(pattern.matches("LIST"));
assertFalse(pattern.matches("LIST<LIST<STRING>>"));
assertFalse(pattern.matches("FOO"));
// no type arg
pattern = new TypePattern("STRING");
assertTrue(pattern.matches("STRING"));
assertFalse(pattern.matches("STRING<STRING>"));
// optional 1 nested type argument
pattern = new TypePattern("LIST<*>");
assertTrue(pattern.matches("LIST"));
assertTrue(pattern.matches("LIST<STRING>"));
assertFalse(pattern.matches("LIST<LIST<STRING>>"));
// this shows this can also match nested lists, which may go a bit beyond the purpose as this kind
// of matching should serve to guarantee 1-level nested types. However, in practice this won't occur
// since a list always has a type argument.
assertTrue(pattern.matches("LIST<LIST>"));
// exactly 1 nested type argument
pattern = new TypePattern("LIST<+>");
assertTrue(pattern.matches("LIST<STRING>"));
assertFalse(pattern.matches("LIST"));
assertFalse(pattern.matches("LIST<LIST<STRING>>"));
// optionally any number of nested type arguments, including 0
pattern = new TypePattern("LIST<**>");
assertTrue(pattern.matches("LIST"));
assertFalse(pattern.matches("STRING"));
assertTrue(pattern.matches("LIST<STRING>"));
assertTrue(pattern.matches("LIST<LIST<STRING>>"));
assertTrue(pattern.matches("LIST<LIST<PATH<STRING>>>"));
// optionally any number of nested type arguments, but at least 1
pattern = new TypePattern("LIST<++>");
assertFalse(pattern.matches("STRING"));
assertTrue(pattern.matches("LIST<STRING>"));
assertTrue(pattern.matches("LIST<LIST<STRING>>"));
assertTrue(pattern.matches("LIST<LIST<PATH<STRING>>>"));
// exactly 1 nested type argument at a deeper level
pattern = new TypePattern("LIST<LIST<+>>");
assertTrue(pattern.matches("LIST<LIST<STRING>>"));
assertTrue(pattern.matches("LIST<LIST<LONG>>"));
assertFalse(pattern.matches("LIST<LIST<LIST<LONG>>>"));
}