AbstractResult.java revision 6d0dae6a6534a01ee4c58d4f4ee1bf115c82319c
1803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams/*
2803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * Copyright (C) 2010 The Android Open Source Project
3803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams *
4803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * you may not use this file except in compliance with the License.
6803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * You may obtain a copy of the License at
7803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams *
8803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams *
10803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * Unless required by applicable law or agreed to in writing, software
11803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * See the License for the specific language governing permissions and
14803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * limitations under the License.
15803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams */
16803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
17803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Samspackage com.android.dumprendertree2;
18803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
19803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Samsimport android.os.Bundle;
20803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Samsimport android.os.Message;
216c72eec06e69559b4d990777c7b280aa81586797Alex Sakhartchoukimport android.webkit.WebView;
22803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
235316b9eead0c29df36f46d29c17914bc3c61ed9fJason Sams/**
245316b9eead0c29df36f46d29c17914bc3c61ed9fJason Sams * A class that represent a result of the test. It is responsible for returning the result's
254a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk * raw data and generating its own diff in HTML format.
264a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk */
278650c32907b74b945dd6cc9a5bf41c12fde005dfAlex Sakhartchoukpublic abstract class AbstractResult implements Comparable<AbstractResult> {
28803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
29803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams    public enum TestType {
30803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        TEXT {
31803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams            @Override
32803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams            public AbstractResult createResult(Bundle bundle) {
33803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams                return new TextResult(bundle);
34803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams            }
35803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        },
36803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        RENDER_TREE {
37803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams            @Override
38803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams            public AbstractResult createResult(Bundle bundle) {
39803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams                /** TODO: RenderTree tests are not yet supported */
40803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams                return null;
41803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams            }
42803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        };
43803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
44803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        public abstract AbstractResult createResult(Bundle bundle);
45803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams    }
46803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
47803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams    public enum ResultCode {
48803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        PASS("Passed"),
49803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        FAIL_RESULT_DIFFERS("Result differs"),
50803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        FAIL_NO_EXPECTED_RESULT("No expected result"),
51803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        FAIL_TIMED_OUT("Timed out"),
52803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        FAIL_CRASHED("Crashed");
53803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
54803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        private String mTitle;
55803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
56803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        private ResultCode(String title) {
57803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams            mTitle = title;
58803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        }
59803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
60803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        @Override
61803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        public String toString() {
62803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams            return mTitle;
63803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        }
64803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams    }
65803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
66803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams    public int compareTo(AbstractResult another) {
67803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        return getRelativePath().compareTo(another.getRelativePath());
68803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams    }
69803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
70803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams    /**
71803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams     * Makes the result object obtain the results of the test from the webview
724a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk     * and store them in the format that suits itself bests. This method is asynchronous.
734a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk     * The message passed as a parameter is a message that should be sent to its target
748650c32907b74b945dd6cc9a5bf41c12fde005dfAlex Sakhartchouk     * when the result finishes obtaining the result.
75803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams     *
76803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams     * @param webview
77803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams     * @param resultObtainedMsg
78803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams     */
79803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams    public abstract void obtainActualResults(WebView webview, Message resultObtainedMsg);
80803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
816c72eec06e69559b4d990777c7b280aa81586797Alex Sakhartchouk    public abstract void setExpectedImageResult(byte[] expectedResult);
82803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
83407cae950325682a56fe5373dd218a666da901efAlex Sakhartchouk    public abstract void setExpectedTextResult(String expectedResult);
84407cae950325682a56fe5373dd218a666da901efAlex Sakhartchouk
85803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams    /**
86803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams     * Returns result's image data that can be written to the disk. It can be null
87803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams     * if there is an error of some sort or for example the test times out.
88     *
89     * <p> Some tests will not provide data (like text tests)
90     *
91     * @return
92     *      results image data
93     */
94    public abstract byte[] getActualImageResult();
95
96    /**
97     * Returns result's text data. It can be null
98     * if there is an error of some sort or for example the test times out.
99     *
100     * @return
101     *      results text data
102     */
103    public abstract String getActualTextResult();
104
105    /**
106     * Returns the code of this result.
107     *
108     * @return
109     *      the code of this result
110     */
111    public abstract ResultCode getResultCode();
112
113    /**
114     * Return the type of the result data.
115     *
116     * @return
117     *      the type of the result data.
118     */
119    public abstract TestType getType();
120
121    public abstract String getRelativePath();
122
123    /**
124     * Returns a piece of HTML code that presents a visual diff between a result and
125     * the expected result.
126     *
127     * @return
128     *      a piece of HTML code with a visual diff between the result and the expected result
129     */
130    public abstract String getDiffAsHtml();
131
132    public abstract Bundle getBundle();
133}