summaryrefslogtreecommitdiffstats
path: root/tools/runner/java/vogar/Expectation.java
diff options
context:
space:
mode:
authorJesse Wilson <jessewilson@google.com>2010-03-30 23:37:04 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-03-30 23:37:04 -0700
commite250bd3d04f82ff6fa9623372a3d78f213430fb6 (patch)
tree7e96d197a304145c1896a074c0bc9e23ef334d6e /tools/runner/java/vogar/Expectation.java
parentda759115c60aed5f46c5dfa46016c48f0ac26057 (diff)
parent320b780fdfb5d779f5ce1c7e15e66e320f0e5932 (diff)
downloadlibcore-e250bd3d04f82ff6fa9623372a3d78f213430fb6.zip
libcore-e250bd3d04f82ff6fa9623372a3d78f213430fb6.tar.gz
libcore-e250bd3d04f82ff6fa9623372a3d78f213430fb6.tar.bz2
Merge "Splitting TestRun into Action and Outcome." into dalvik-dev
Diffstat (limited to 'tools/runner/java/vogar/Expectation.java')
-rw-r--r--tools/runner/java/vogar/Expectation.java101
1 files changed, 101 insertions, 0 deletions
diff --git a/tools/runner/java/vogar/Expectation.java b/tools/runner/java/vogar/Expectation.java
new file mode 100644
index 0000000..b52b5a3
--- /dev/null
+++ b/tools/runner/java/vogar/Expectation.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package vogar;
+
+import java.util.regex.Pattern;
+
+/**
+ * The expected result of an action execution. This is typically encoded in the
+ * expectations text file, which has the following format:
+ * <pre>
+ * test java.io.StreamTokenizer.Reset
+ * result UNSUPPORTED
+ * pattern .*should get token \[, but get -1.*
+ *
+ * # should we fix this?
+ * test java.util.Arrays.CopyMethods
+ * result COMPILE_FAILED
+ * pattern .*cannot find symbol.*
+ * </pre>
+ */
+final class Expectation {
+
+ /** The pattern to use when no expected output is specified */
+ private static final Pattern MATCH_ALL_PATTERN
+ = Pattern.compile(".*", Pattern.MULTILINE | Pattern.DOTALL);
+
+ /** The expectation of a general successful run. */
+ static final Expectation SUCCESS = new Expectation(Result.SUCCESS, null);
+
+ /** The action's expected result, such as {@code EXEC_FAILED}. */
+ private final Result result;
+
+ /** The pattern the expected output will match. */
+ private final Pattern pattern;
+
+ public Expectation(Result result, String pattern) {
+ if (result == null) {
+ throw new IllegalArgumentException();
+ }
+
+ this.result = result;
+ this.pattern = pattern != null
+ ? Pattern.compile(pattern, Pattern.MULTILINE | Pattern.DOTALL)
+ : MATCH_ALL_PATTERN;
+ }
+
+ public Result getResult() {
+ return result;
+ }
+
+ /**
+ * Returns true if {@code outcome} matches this expectation.
+ */
+ public boolean matches(Outcome outcome) {
+ return result == outcome.getResult() && patternMatches(outcome);
+ }
+
+ /**
+ * Returns the failure message for this failed run. This message is intended
+ * to help to diagnose why the run result didn't match what was expected.
+ */
+ public String getFailureMessage(Outcome outcome) {
+ StringBuilder builder = new StringBuilder();
+
+ if (result != Result.SUCCESS && result != outcome.getResult()) {
+ builder.append("Expected result: ")
+ .append(result)
+ .append("\n");
+ }
+
+ if (!patternMatches(outcome)) {
+ builder.append("Expected output to match \"")
+ .append(pattern.pattern())
+ .append("\"\n");
+ }
+
+ for (String output : outcome.getOutputLines()) {
+ builder.append(output).append("\n");
+ }
+
+ return builder.toString();
+ }
+
+ private boolean patternMatches(Outcome outcome) {
+ return pattern.matcher(Strings.join(outcome.getOutputLines(), "\n")).matches();
+ }
+}