@Test
	public void rogueTokenization() {
		Tokens tokens = new Tokens("<(xx | '*'=$END) & yy>");
		assertToken(TokenKind.SPLIT_OPEN, "<", 0, 1, tokens.next());
		assertToken(TokenKind.OPEN_PAREN, "(", 1, 2, tokens.next());
		assertToken(TokenKind.IDENTIFIER, "xx", 2, 4, tokens.next());
		assertToken(TokenKind.PIPE, "|", 5, 6, tokens.next());
		assertToken(TokenKind.LITERAL_STRING, "'*'", 7, 10, tokens.next());
		assertToken(TokenKind.EQUALS, "=", 10, 11, tokens.next());
		assertToken(TokenKind.IDENTIFIER, "$END", 11, 15, tokens.next());
		assertToken(TokenKind.CLOSE_PAREN, ")", 15, 16, tokens.next());
		assertToken(TokenKind.AMPERSAND, "&", 17, 18, tokens.next());
		assertToken(TokenKind.IDENTIFIER, "yy", 19, 21, tokens.next());
		assertToken(TokenKind.SPLIT_CLOSE, ">", 21, 22, tokens.next());
	}
Parse job specifications and verify either the correct abstract syntax tree is produced or the current exception comes out.
The parser does no semantic validation, it is purely syntax checking.

@author Andy Clement
spring-xd-dirt/src/test/java/org/springframework/xd/dirt/job/dsl/JobParserTests.java