xref: /aosp_15_r20/cts/libs/vogar-expect/src/vogar/expect/Expectation.java (revision b7c941bb3fa97aba169d73cee0bed2de8ac964bf)
1*b7c941bbSAndroid Build Coastguard Worker /*
2*b7c941bbSAndroid Build Coastguard Worker  * Copyright (C) 2010 The Android Open Source Project
3*b7c941bbSAndroid Build Coastguard Worker  *
4*b7c941bbSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*b7c941bbSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*b7c941bbSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*b7c941bbSAndroid Build Coastguard Worker  *
8*b7c941bbSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*b7c941bbSAndroid Build Coastguard Worker  *
10*b7c941bbSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*b7c941bbSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*b7c941bbSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*b7c941bbSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*b7c941bbSAndroid Build Coastguard Worker  * limitations under the License.
15*b7c941bbSAndroid Build Coastguard Worker  */
16*b7c941bbSAndroid Build Coastguard Worker 
17*b7c941bbSAndroid Build Coastguard Worker package vogar.expect;
18*b7c941bbSAndroid Build Coastguard Worker 
19*b7c941bbSAndroid Build Coastguard Worker import java.util.LinkedHashSet;
20*b7c941bbSAndroid Build Coastguard Worker import java.util.Set;
21*b7c941bbSAndroid Build Coastguard Worker import java.util.regex.Pattern;
22*b7c941bbSAndroid Build Coastguard Worker 
23*b7c941bbSAndroid Build Coastguard Worker /**
24*b7c941bbSAndroid Build Coastguard Worker  * The expected result of an action execution. This is typically encoded in the
25*b7c941bbSAndroid Build Coastguard Worker  * expectations text file, which has the following format:
26*b7c941bbSAndroid Build Coastguard Worker  * <pre>
27*b7c941bbSAndroid Build Coastguard Worker  * test java.io.StreamTokenizer.Reset
28*b7c941bbSAndroid Build Coastguard Worker  * result UNSUPPORTED
29*b7c941bbSAndroid Build Coastguard Worker  * pattern .*should get token \[, but get -1.*
30*b7c941bbSAndroid Build Coastguard Worker  *
31*b7c941bbSAndroid Build Coastguard Worker  * # should we fix this?
32*b7c941bbSAndroid Build Coastguard Worker  * test java.util.Arrays.CopyMethods
33*b7c941bbSAndroid Build Coastguard Worker  * result COMPILE_FAILED
34*b7c941bbSAndroid Build Coastguard Worker  * pattern .*cannot find symbol.*
35*b7c941bbSAndroid Build Coastguard Worker  * </pre>
36*b7c941bbSAndroid Build Coastguard Worker  */
37*b7c941bbSAndroid Build Coastguard Worker public final class Expectation {
38*b7c941bbSAndroid Build Coastguard Worker 
39*b7c941bbSAndroid Build Coastguard Worker     /** Justification for this expectation */
40*b7c941bbSAndroid Build Coastguard Worker     private final String description;
41*b7c941bbSAndroid Build Coastguard Worker 
42*b7c941bbSAndroid Build Coastguard Worker     /** The action's expected result, such as {@code EXEC_FAILED}. */
43*b7c941bbSAndroid Build Coastguard Worker     private final Result result;
44*b7c941bbSAndroid Build Coastguard Worker 
45*b7c941bbSAndroid Build Coastguard Worker     /** The pattern the expected output will match. */
46*b7c941bbSAndroid Build Coastguard Worker     private final Pattern pattern;
47*b7c941bbSAndroid Build Coastguard Worker 
48*b7c941bbSAndroid Build Coastguard Worker     /** Attributes of this test. */
49*b7c941bbSAndroid Build Coastguard Worker     private final Set<String> tags;
50*b7c941bbSAndroid Build Coastguard Worker 
51*b7c941bbSAndroid Build Coastguard Worker     /** The tracking bug ID */
52*b7c941bbSAndroid Build Coastguard Worker     private final long bug;
53*b7c941bbSAndroid Build Coastguard Worker 
54*b7c941bbSAndroid Build Coastguard Worker     /** True if the identified bug still active. */
55*b7c941bbSAndroid Build Coastguard Worker     private boolean bugIsOpen = false;
56*b7c941bbSAndroid Build Coastguard Worker 
Expectation(Result result, Pattern pattern, Set<String> tags, String description, long bug)57*b7c941bbSAndroid Build Coastguard Worker     public Expectation(Result result, Pattern pattern, Set<String> tags, String description, long bug) {
58*b7c941bbSAndroid Build Coastguard Worker         if (result == null || description == null || pattern == null) {
59*b7c941bbSAndroid Build Coastguard Worker             throw new IllegalArgumentException(
60*b7c941bbSAndroid Build Coastguard Worker                     "result=" + result + " description=" + description + " pattern=" + pattern);
61*b7c941bbSAndroid Build Coastguard Worker         }
62*b7c941bbSAndroid Build Coastguard Worker 
63*b7c941bbSAndroid Build Coastguard Worker         this.description = description;
64*b7c941bbSAndroid Build Coastguard Worker         this.result = result;
65*b7c941bbSAndroid Build Coastguard Worker         this.pattern = pattern;
66*b7c941bbSAndroid Build Coastguard Worker         this.tags = new LinkedHashSet<String>(tags);
67*b7c941bbSAndroid Build Coastguard Worker         this.bug = bug;
68*b7c941bbSAndroid Build Coastguard Worker     }
69*b7c941bbSAndroid Build Coastguard Worker 
getDescription()70*b7c941bbSAndroid Build Coastguard Worker     public String getDescription() {
71*b7c941bbSAndroid Build Coastguard Worker         return description;
72*b7c941bbSAndroid Build Coastguard Worker     }
73*b7c941bbSAndroid Build Coastguard Worker 
getBug()74*b7c941bbSAndroid Build Coastguard Worker     public long getBug() {
75*b7c941bbSAndroid Build Coastguard Worker         return bug;
76*b7c941bbSAndroid Build Coastguard Worker     }
77*b7c941bbSAndroid Build Coastguard Worker 
getResult()78*b7c941bbSAndroid Build Coastguard Worker     public Result getResult() {
79*b7c941bbSAndroid Build Coastguard Worker         return result;
80*b7c941bbSAndroid Build Coastguard Worker     }
81*b7c941bbSAndroid Build Coastguard Worker 
getTags()82*b7c941bbSAndroid Build Coastguard Worker     public Set<String> getTags() {
83*b7c941bbSAndroid Build Coastguard Worker         return tags;
84*b7c941bbSAndroid Build Coastguard Worker     }
85*b7c941bbSAndroid Build Coastguard Worker 
86*b7c941bbSAndroid Build Coastguard Worker     /**
87*b7c941bbSAndroid Build Coastguard Worker      * Set the current status of this expectation's bug. When a bug is open,
88*b7c941bbSAndroid Build Coastguard Worker      * any result (success or failure) is permitted.
89*b7c941bbSAndroid Build Coastguard Worker      */
setBugIsOpen(boolean bugIsOpen)90*b7c941bbSAndroid Build Coastguard Worker     public void setBugIsOpen(boolean bugIsOpen) {
91*b7c941bbSAndroid Build Coastguard Worker         this.bugIsOpen = bugIsOpen;
92*b7c941bbSAndroid Build Coastguard Worker     }
93*b7c941bbSAndroid Build Coastguard Worker 
94*b7c941bbSAndroid Build Coastguard Worker     /**
95*b7c941bbSAndroid Build Coastguard Worker      * Returns true if {@code outcome} matches this expectation.
96*b7c941bbSAndroid Build Coastguard Worker      */
matches(Outcome outcome)97*b7c941bbSAndroid Build Coastguard Worker     public boolean matches(Outcome outcome) {
98*b7c941bbSAndroid Build Coastguard Worker         return patternMatches(outcome) && (bugIsOpen || result == outcome.getResult());
99*b7c941bbSAndroid Build Coastguard Worker     }
100*b7c941bbSAndroid Build Coastguard Worker 
patternMatches(Outcome outcome)101*b7c941bbSAndroid Build Coastguard Worker     private boolean patternMatches(Outcome outcome) {
102*b7c941bbSAndroid Build Coastguard Worker         return pattern.matcher(outcome.getOutput()).matches();
103*b7c941bbSAndroid Build Coastguard Worker     }
104*b7c941bbSAndroid Build Coastguard Worker 
toString()105*b7c941bbSAndroid Build Coastguard Worker     @Override public String toString() {
106*b7c941bbSAndroid Build Coastguard Worker         return "Expectation[description=" + description + " pattern=" + pattern.pattern() + "]";
107*b7c941bbSAndroid Build Coastguard Worker     }
108*b7c941bbSAndroid Build Coastguard Worker }
109