diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/token/ArrayPathToken.java b/json-path/src/main/java/com/jayway/jsonpath/internal/token/ArrayPathToken.java index ca3bbeea..2cfeefae 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/token/ArrayPathToken.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/token/ArrayPathToken.java @@ -181,7 +181,7 @@ public class ArrayPathToken extends PathToken { @Override public boolean checkForMatch(TokenStack stack, int idx) { - assert(stack.getStack().size() > idx); + if (stack.getStack().size() <= idx) return false; TokenStackElement curr = stack.getStack().get(idx); if (curr.getType() == TokenType.ARRAY_TOKEN) { diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/token/PropertyPathToken.java b/json-path/src/main/java/com/jayway/jsonpath/internal/token/PropertyPathToken.java index 35405d82..5b404871 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/token/PropertyPathToken.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/token/PropertyPathToken.java @@ -26,8 +26,6 @@ import com.jayway.jsonpath.internal.Utils; */ public class PropertyPathToken extends PathToken { - protected static Logger log = Logger.getLogger("com.jayway.jsonpath"); - private final List properties; public PropertyPathToken(List properties) { @@ -50,14 +48,13 @@ public class PropertyPathToken extends PathToken { @Override public boolean checkForMatch(TokenStack stack, int idx) { - assert(stack.getStack().size() > idx); + if (stack.getStack().size() <= idx) return false; TokenStackElement curr = stack.getStack().get(idx); if (curr.getType() == TokenType.OBJECT_TOKEN) { ObjectToken token = (ObjectToken)curr; if (token.getKey() != null) { for (String checkKey : properties) { - log.info("checking key " + checkKey + " against " + token.getKey()); if (token.getKey().equals(checkKey)) { if (isLeaf()) { return stack.getStack().size() - 1 == idx; diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/token/ScanPathToken.java b/json-path/src/main/java/com/jayway/jsonpath/internal/token/ScanPathToken.java index 0cc502e4..e2bef879 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/token/ScanPathToken.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/token/ScanPathToken.java @@ -99,7 +99,7 @@ public class ScanPathToken extends PathToken { @Override public boolean checkForMatch(TokenStack stack, int idx) { - assert(stack.getStack().size() > idx); + if (stack.getStack().size() <= idx) return false; TokenStackElement curr = stack.getStack().get(idx); if (curr.getType() == TokenType.ARRAY_TOKEN diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/token/TokenStack.java b/json-path/src/main/java/com/jayway/jsonpath/internal/token/TokenStack.java index 6c6844ab..10bd78d6 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/token/TokenStack.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/token/TokenStack.java @@ -47,150 +47,147 @@ public class TokenStack paths.add(path); } - // reads tokens and goes to first leaf + /** + * reads from stream and notifies the callback of matched registered paths + */ public void read(JsonParser parser, EvaluationCallback callback) + throws Exception { assert(callback != null); - try { - //boolean lookingForRow = true; - //TokenStackElement rowToken = null; - boolean needsPathCheck = false; - while (parser.nextToken() != null) { - boolean saveMatch = false; - switch (parser.getCurrentToken()) { - case START_ARRAY: - { - if (curr != null) { - TokenStackElement newElem = new ArrayToken(); - curr.setValue(newElem); - curr = newElem; - } else { - curr = new ArrayToken(); - } - saveMatch = true; - needsPathCheck = true; - elements.push(curr); - break; - } - case END_ARRAY: - { - Path match = matchedPaths.remove(curr); - if (match != null) { - callback.resultFoundExit(match); - } - elements.pop(); - if (elements.empty()) curr = null; - else curr = elements.peek(); - saveMatch = true; - needsPathCheck = true; - break; + boolean needsPathCheck = false; + while (parser.nextToken() != null) { + boolean saveMatch = false; + switch (parser.getCurrentToken()) { + case START_ARRAY: + { + if (curr != null) { + TokenStackElement newElem = new ArrayToken(); + curr.setValue(newElem); + curr = newElem; + } else { + curr = new ArrayToken(); } - case VALUE_EMBEDDED_OBJECT: - case START_OBJECT: - { - if (curr != null) { - TokenStackElement newElem = new ObjectToken(); - curr.setValue(newElem); - curr = newElem; - } else { - curr = new ObjectToken(); - } - //if (!elements.empty()) - saveMatch = true; - needsPathCheck = true; - elements.push(curr); - break; + saveMatch = true; + needsPathCheck = true; + elements.push(curr); + break; + } + case END_ARRAY: + { + Path match = matchedPaths.remove(curr); + if (match != null) { + callback.resultFoundExit(match); } - case END_OBJECT: - { - Path match = matchedPaths.remove(curr); - if (match != null) { + elements.pop(); + if (elements.empty()) curr = null; + else curr = elements.peek(); + break; + } + case VALUE_EMBEDDED_OBJECT: + case START_OBJECT: + { + if (curr != null && curr.getType() == TokenType.ARRAY_TOKEN) { + + if (((ArrayToken)curr).getValue() != null && + matchedPaths.containsKey(curr)) { + + Path match = matchedPaths.remove(curr); callback.resultFoundExit(match); + + if (match.checkForMatch(this)) { + + matchedPaths.put(curr, match); + callback.resultFound(match); + } } - elements.pop(); - if (elements.empty()) curr = null; - else curr = elements.peek(); - saveMatch = true; - needsPathCheck = true; - break; - } - case FIELD_NAME: - { - assert(curr instanceof ObjectToken); - ((ObjectToken)curr).key = parser.getText(); - break; - } - case VALUE_FALSE: - { - StringToken newToken = new StringToken("FALSE"); - curr.setValue(newToken); - needsPathCheck = true; - break; } - case VALUE_TRUE: - { - StringToken newToken = new StringToken("TRUE"); - curr.setValue(newToken); - needsPathCheck = true; - break; - } - case VALUE_NUMBER_FLOAT: - { - FloatToken newToken = - new FloatToken((float)parser.getValueAsDouble()); - curr.setValue(newToken); - needsPathCheck = true; - break; - } - case VALUE_NUMBER_INT: - { - IntToken newToken = - new IntToken(parser.getValueAsInt()); - curr.setValue(newToken); - needsPathCheck = true; - break; - } - case VALUE_STRING: - { - StringToken newToken = - new StringToken(parser.getText()); - curr.setValue(newToken); - needsPathCheck = true; - break; - } - case VALUE_NULL: - { - curr.setValue(null); - needsPathCheck = true; - break; + + if (curr != null) { + TokenStackElement newElem = new ObjectToken(); + curr.setValue(newElem); + curr = newElem; + } else { + curr = new ObjectToken(); } - default: - assert false; + saveMatch = true; + needsPathCheck = true; + elements.push(curr); + break; + } + case END_OBJECT: + { + Path match = matchedPaths.remove(curr); + if (match != null) { + callback.resultFoundExit(match); } - // now check the paths for matches - if (needsPathCheck) { - for (Path path : paths) { - if (path.checkForMatch(this)) { - if (saveMatch) { - Path oldMatch = matchedPaths.get(curr); - if (oldMatch != null) { - callback.resultFoundExit(oldMatch); - } - matchedPaths.put(curr, path); - break; - } - callback.resultFound(path); - } + elements.pop(); + if (elements.empty()) curr = null; + else curr = elements.peek(); + break; + } + case FIELD_NAME: + { + assert(curr instanceof ObjectToken); + ((ObjectToken)curr).key = parser.getText(); + break; + } + case VALUE_FALSE: + { + StringToken newToken = new StringToken("FALSE"); + curr.setValue(newToken); + needsPathCheck = true; + break; + } + case VALUE_TRUE: + { + StringToken newToken = new StringToken("TRUE"); + curr.setValue(newToken); + needsPathCheck = true; + break; + } + case VALUE_NUMBER_FLOAT: + { + FloatToken newToken = + new FloatToken((float)parser.getValueAsDouble()); + curr.setValue(newToken); + needsPathCheck = true; + break; + } + case VALUE_NUMBER_INT: + { + IntToken newToken = new IntToken(parser.getValueAsInt()); + curr.setValue(newToken); + needsPathCheck = true; + break; + } + case VALUE_STRING: + { + StringToken newToken = new StringToken(parser.getText()); + curr.setValue(newToken); + needsPathCheck = true; + break; + } + case VALUE_NULL: + { + curr.setValue(null); + needsPathCheck = true; + break; + } + default: + assert false; + } + // now check the paths for matches + if (needsPathCheck) { + for (Path path : paths) { + if (path.checkForMatch(this)) { + if (saveMatch) matchedPaths.put(curr, path); + callback.resultFound(path); } - needsPathCheck = false; } + needsPathCheck = false; } - } catch (Exception e) { - //e.printStackTrace(); - log.log(Level.INFO, e.getMessage(), e); } - log.fine("finished read"); } public String toString() diff --git a/json-path/src/test/java/com/jayway/jsonpath/CallbackRecorder.java b/json-path/src/test/java/com/jayway/jsonpath/CallbackRecorder.java new file mode 100644 index 00000000..a1ef55a9 --- /dev/null +++ b/json-path/src/test/java/com/jayway/jsonpath/CallbackRecorder.java @@ -0,0 +1,56 @@ +package com.jayway.jsonpath; + +import java.util.List; +import java.util.ArrayList; + +import com.jayway.jsonpath.EvaluationCallback; +import com.jayway.jsonpath.internal.Path; + +public class CallbackRecorder implements EvaluationCallback { + + public static class CallbackEvent { + private Path path; + private boolean exit; + public CallbackEvent(Path path, boolean exit) { + this.path = path; + this.exit = exit; + } + + public Path getPath() { + return path; + } + + public boolean isExit() { + return exit; + } + + public boolean equals(Object o) { + if (o instanceof CallbackEvent) { + CallbackEvent other = (CallbackEvent)o; + return other.getPath() == path && other.isExit() == exit; + } + return false; + } + } + + private List results; + + public CallbackRecorder() { + + results = new ArrayList(); + } + + public void resultFound(Path path) { + System.err.println("found result " + path); + results.add(new CallbackEvent(path, false)); + } + + public void resultFoundExit(Path path) { + System.err.println("exiting result " + path); + results.add(new CallbackEvent(path, true)); + } + + public List getResults() { + return results; + } +} diff --git a/json-path/src/test/java/com/jayway/jsonpath/JacksonTest.java b/json-path/src/test/java/com/jayway/jsonpath/JacksonTest.java index 7799c9d7..5b4f2456 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/JacksonTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/JacksonTest.java @@ -3,11 +3,22 @@ package com.jayway.jsonpath; import org.junit.Test; import java.util.Date; +import java.io.InputStream; +import java.io.ByteArrayInputStream; +import java.nio.charset.Charset; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonFactory; + +import com.jayway.jsonpath.EvaluationCallback; +import com.jayway.jsonpath.internal.Path; +import com.jayway.jsonpath.internal.PathCompiler; +import com.jayway.jsonpath.internal.token.*; import static java.util.Collections.singletonMap; import static org.assertj.core.api.Assertions.assertThat; -public class JacksonTest extends BaseTest { +public class JacksonTest extends BaseTest implements EvaluationCallback { @Test public void an_object_can_be_mapped_to_pojo() { @@ -45,4 +56,543 @@ public class JacksonTest extends BaseTest { assertThat(date).isEqualTo(now); } + protected TokenStack stack = null; + protected CallbackRecorder recorder = null; + protected Path idPath = null; + protected int match = 0; + + @Test + public void streamingTest() throws Exception { + + Path path = + PathCompiler.compile("$..completed_tasks[0:]"); + idPath = + PathCompiler.compile("$..completed_tasks[0:].id"); + stack = new TokenStack(JACKSON_CONFIGURATION); + + recorder = new CallbackRecorder(); + String res = "issue_76.json"; + InputStream stream = + getClass().getClassLoader().getResourceAsStream(res); + assert(stream != null); + + JsonFactory factory = new JsonFactory(); + stack.registerPath(path); + stack.registerPath(idPath); + stack.read(factory.createJsonParser(stream), this); + Thread.sleep(1000); + + assert(recorder.getResults().get(0). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(1). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(2). + equals(new CallbackRecorder.CallbackEvent(path, true))); + assert(recorder.getResults().get(3). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(4). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(5). + equals(new CallbackRecorder.CallbackEvent(path, true))); + assert(recorder.getResults().get(6). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(7). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(8). + equals(new CallbackRecorder.CallbackEvent(path, true))); + assert(recorder.getResults().get(9). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(10). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(11). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(12). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(13). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(14). + equals(new CallbackRecorder.CallbackEvent(path, true))); + assert(recorder.getResults().get(15). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(16). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(17). + equals(new CallbackRecorder.CallbackEvent(path, true))); + assert(recorder.getResults().get(18). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(19). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(20). + equals(new CallbackRecorder.CallbackEvent(path, true))); + assert(recorder.getResults().get(21). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(22). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(23). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + + assert(recorder.getResults().get(24). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(25). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(26). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(27). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(28). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(29). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(30). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(31). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(32). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(33). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(34). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(35). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(36). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(37). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(38). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(39). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(40). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(41). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(42). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(43). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(44). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(45). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(46). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(47). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(48). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(49). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(50). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(51). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(52). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(53). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(54). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(55). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(56). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(57). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(58). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(59). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(60). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(61). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(62). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(63). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(64). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(65). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(66). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(67). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(68). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(69). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(70). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(71). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(72). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(73). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(74). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(75). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(76). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(77). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(78). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(79). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(80). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(81). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(82). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(83). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(84). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(85). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(86). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(87). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(88). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(89). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(90). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(91). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(92). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(93). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(94). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(95). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(96). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(97). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(98). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(99). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(100). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(101). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(102). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(103). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(104). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(105). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(106). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(107). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(108). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(109). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(110). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(111). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(112). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(113). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(114). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(115). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(116). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(117). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(118). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(119). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(120). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(121). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(122). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(123). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(124). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(125). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(126). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(127). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(128). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(129). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(130). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(131). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(132). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(133). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(134). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(135). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(136). + equals(new CallbackRecorder.CallbackEvent(path, true))); + + assert(recorder.getResults().get(137). + equals(new CallbackRecorder.CallbackEvent(path, false))); + assert(recorder.getResults().get(138). + equals(new CallbackRecorder.CallbackEvent(idPath, false))); + assert(recorder.getResults().get(139). + equals(new CallbackRecorder.CallbackEvent(path, true))); + } + + public void resultFound(Path path) { + if (path == idPath) { + switch (match++) { + case 0: + checkResult(stack, "mesos-jenkins-172c6f74-12bc-44fe-849a-ad902ddc2b64"); + break; + case 1: + checkResult(stack, "mesos-jenkins-cd18b433-e2ee-4a4e-875b-6ea82d90a53a"); + break; + case 2: + checkResult(stack, "mesos-jenkins-66fca7c0-88f7-4a1a-9796-a6de2e337b0a"); + break; + case 3: + checkResult(stack, "mesos-jenkins-258ad47c-85bf-4fe0-b7c4-4f0cc70f2998"); + break; + case 4: + checkResult(stack, "mesos-jenkins-f30e5e34-2ef6-4993-9260-73ee3520c0a5"); + break; + case 5: + checkResult(stack, "mesos-jenkins-1fc0bbd8-f0ff-48cd-a7f7-24a9436ba6bc"); + break; + case 6: + checkResult(stack, "mesos-jenkins-62b44026-843d-4813-a6a8-e95215250bb1"); + break; + case 7: + checkResult(stack, "mesos-jenkins-807b9b8a-3283-4e78-94e1-9dc17df4df77"); + break; + case 8: + checkResult(stack, "test_dv_helloworld.95f49d05-c9bf-11e4-a1fc-56847afe9799"); + break; + case 9: + checkResult(stack, "test_dv_helloworld.a40abda6-ca02-11e4-a1fc-56847afe9799"); + break; + case 10: + checkResult(stack, "test_dv_helloworld.3946a287-ca67-11e4-a1fc-56847afe9799"); + break; + case 11: + checkResult(stack, "test_dv_helloworld.fec0c74c-ce11-11e4-a1fc-56847afe9799"); + break; + case 12: + checkResult(stack, "test_jenkins-master.33d4007e-cf37-11e4-a1fc-56847afe9799"); + break; + case 13: + checkResult(stack, "test_jenkins-master.359deb0f-cf37-11e4-a1fc-56847afe9799"); + break; + case 14: + checkResult(stack, "test_jenkins-master.50773d6a-cf37-11e4-a1fc-56847afe9799"); + break; + case 15: + checkResult(stack, "test_jenkins-master.638fd9ce-cf37-11e4-a1fc-56847afe9799"); + break; + case 16: + checkResult(stack, "test_jenkins-master.81fd2852-cf37-11e4-a1fc-56847afe9799"); + break; + case 17: + checkResult(stack, "test_jenkins-master.afedb77b-cf37-11e4-a1fc-56847afe9799"); + break; + case 18: + checkResult(stack, "test_jenkins-master.0243c011-cf38-11e4-a1fc-56847afe9799"); + break; + case 19: + checkResult(stack, "test_dv_helloworld.4bdb1099-d1de-11e4-a1fc-56847afe9799"); + break; + case 20: + checkResult(stack, "sdp_shared_jenkins-master.eb8f2863-c9a2-11e4-a1fc-56847afe9799"); + break; + case 21: + checkResult(stack, "test_dv_helloworld.c7865efb-cd05-11e4-a1fc-56847afe9799"); + break; + case 22: + checkResult(stack, "test_jenkins-master.37684ad0-cf37-11e4-a1fc-56847afe9799"); + break; + case 23: + checkResult(stack, "test_jenkins-master.3c2e3752-cf37-11e4-a1fc-56847afe9799"); + break; + case 24: + checkResult(stack, "test_jenkins-master.405b3f34-cf37-11e4-a1fc-56847afe9799"); + break; + case 25: + checkResult(stack, "test_jenkins-master.44886e26-cf37-11e4-a1fc-56847afe9799"); + break; + case 26: + checkResult(stack, "test_jenkins-master.54a4936b-cf37-11e4-a1fc-56847afe9799"); + break; + case 27: + checkResult(stack, "test_jenkins-master.58d1e96c-cf37-11e4-a1fc-56847afe9799"); + break; + case 28: + checkResult(stack, "test_jenkins-master.5d97fcfd-cf37-11e4-a1fc-56847afe9799"); + break; + case 29: + checkResult(stack, "test_jenkins-master.6986f34f-cf37-11e4-a1fc-56847afe9799"); + break; + case 30: + checkResult(stack, "test_jenkins-master.790a33f1-cf37-11e4-a1fc-56847afe9799"); + break; + case 31: + checkResult(stack, "test_jenkins-master.8c2149b3-cf37-11e4-a1fc-56847afe9799"); + break; + case 32: + checkResult(stack, "test_jenkins-master.9c3d47e4-cf37-11e4-a1fc-56847afe9799"); + break; + case 33: + checkResult(stack, "test_jenkins-master.a06a01a6-cf37-11e4-a1fc-56847afe9799"); + break; + case 34: + checkResult(stack, "test_jenkins-master.fa821fbd-cf37-11e4-a1fc-56847afe9799"); + break; + case 35: + checkResult(stack, "test_jenkins-master.fbb39ade-cf37-11e4-a1fc-56847afe9799"); + break; + case 36: + checkResult(stack, "test_jenkins-master.ffe0f0e0-cf37-11e4-a1fc-56847afe9799"); + break; + case 37: + checkResult(stack, "test_jenkins-master.04a68f42-cf38-11e4-a1fc-56847afe9799"); + break; + case 38: + checkResult(stack, "test_jenkins-master.4ce2cc09-cf37-11e4-a1fc-56847afe9799"); + break; + case 39: + checkResult(stack, "test_jenkins-master.a792e469-cf37-11e4-a1fc-56847afe9799"); + break; + case 40: + checkResult(stack, "test_jenkins-master.fe166a0f-cf37-11e4-a1fc-56847afe9799"); + break; + case 41: + checkResult(stack, "test_jenkins-master.0670c7f3-cf38-11e4-a1fc-56847afe9799"); + break; + case 42: + checkResult(stack, "test_dev_frontend.3950b432-d234-11e4-bc5e-56847afe9799"); + break; + case 43: + checkResult(stack, "test_dv_helloworld.c3a7d253-d241-11e4-bc5e-56847afe9799"); + break; + case 44: + checkResult(stack, "test_dv_helloworld.d7c6b3c4-d244-11e4-bc5e-56847afe9799"); + break; + case 45: + checkResult(stack, "test_dev_frontend.a0f3f185-d2e6-11e4-bc5e-56847afe9799"); + break; + } + //} else { + } + recorder.resultFound(path); + } + + public void resultFoundExit(Path path) { + assert(path != idPath); + recorder.resultFoundExit(path); + } + + protected void checkResult(TokenStack stack, Object expected) { + checkResult(stack.getStack().peek(), expected); + } + + protected void checkResult(TokenStackElement elem, Object expected) { + switch (elem.getType()) { + case STRING_TOKEN: + { + StringToken token = (StringToken)elem; + assert(token.value.equals(expected)); + break; + } + case FLOAT_TOKEN: + { + FloatToken token = (FloatToken)elem; + assert(expected instanceof Float); + assert(token.value == ((Float)expected).floatValue()); + break; + } + case INTEGER_TOKEN: + { + IntToken token = (IntToken)elem; + assert(expected instanceof Integer); + assert(token.value == ((Integer)expected).intValue()); + break; + } + case ARRAY_TOKEN: + case OBJECT_TOKEN: + { + checkResult(elem.getValue(), expected); + break; + } + default: + { + assert(false); + } + } + } }