AbstractResult.java revision 8a6def02473ee4fbffcd1b34173daf751d316202
13c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski/*
23c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * Copyright (C) 2010 The Android Open Source Project
33c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski *
43c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * Licensed under the Apache License, Version 2.0 (the "License");
53c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * you may not use this file except in compliance with the License.
63c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * You may obtain a copy of the License at
73c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski *
83c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski *      http://www.apache.org/licenses/LICENSE-2.0
93c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski *
103c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * Unless required by applicable law or agreed to in writing, software
113c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * distributed under the License is distributed on an "AS IS" BASIS,
123c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * See the License for the specific language governing permissions and
143c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * limitations under the License.
153c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski */
163c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski
173c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowskipackage com.android.dumprendertree2;
183c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski
197ddc0b7a72aa66d699fecce3d855a6c70f844647Maksymilian Osowskiimport android.os.Bundle;
204ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowskiimport android.os.Message;
214ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowskiimport android.webkit.WebView;
224ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski
233c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski/**
243c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * A class that represent a result of the test. It is responsible for returning the result's
253c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski * raw data and generating its own diff in HTML format.
263c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski */
276d0dae6a6534a01ee4c58d4f4ee1bf115c82319cMaksymilian Osowskipublic abstract class AbstractResult implements Comparable<AbstractResult> {
283c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski
29dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski    private static final String LOG_TAG = "AbstractResult";
30dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski
313c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski    public enum TestType {
325f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski        TEXT {
335f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski            @Override
345f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski            public AbstractResult createResult(Bundle bundle) {
355f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski                return new TextResult(bundle);
365f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski            }
375f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski        },
385f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski        RENDER_TREE {
395f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski            @Override
405f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski            public AbstractResult createResult(Bundle bundle) {
415f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski                /** TODO: RenderTree tests are not yet supported */
425f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski                return null;
435f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski            }
445f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski        };
455f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski
465f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski        public abstract AbstractResult createResult(Bundle bundle);
473c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski    }
483c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski
498a6def02473ee4fbffcd1b34173daf751d316202Steve Block    /**
508a6def02473ee4fbffcd1b34173daf751d316202Steve Block     * A code representing the result of comparing actual and expected results.
518a6def02473ee4fbffcd1b34173daf751d316202Steve Block     */
523c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski    public enum ResultCode {
538a6def02473ee4fbffcd1b34173daf751d316202Steve Block        RESULTS_MATCH("Results match"),
548a6def02473ee4fbffcd1b34173daf751d316202Steve Block        RESULTS_DIFFER("Results differ"),
558a6def02473ee4fbffcd1b34173daf751d316202Steve Block        NO_EXPECTED_RESULT("No expected result"),
568a6def02473ee4fbffcd1b34173daf751d316202Steve Block        NO_ACTUAL_RESULT("No actual result");
573c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski
583c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski        private String mTitle;
593c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski
603c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski        private ResultCode(String title) {
613c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski            mTitle = title;
623c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski        }
633c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski
643c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski        @Override
653c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski        public String toString() {
663c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski            return mTitle;
673c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski        }
683c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski    }
693c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski
70dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski    String mAdditionalTextOutputString;
71dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski
726d0dae6a6534a01ee4c58d4f4ee1bf115c82319cMaksymilian Osowski    public int compareTo(AbstractResult another) {
736d0dae6a6534a01ee4c58d4f4ee1bf115c82319cMaksymilian Osowski        return getRelativePath().compareTo(another.getRelativePath());
746d0dae6a6534a01ee4c58d4f4ee1bf115c82319cMaksymilian Osowski    }
756d0dae6a6534a01ee4c58d4f4ee1bf115c82319cMaksymilian Osowski
76dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski    public void setAdditionalTextOutputString(String additionalTextOutputString) {
77dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski        mAdditionalTextOutputString = additionalTextOutputString;
78dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski    }
79dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski
80dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski    public String getAdditionalTextOutputString() {
81dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski        return mAdditionalTextOutputString;
82dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski    }
83dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski
843c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski    /**
857ddc0b7a72aa66d699fecce3d855a6c70f844647Maksymilian Osowski     * Makes the result object obtain the results of the test from the webview
867ddc0b7a72aa66d699fecce3d855a6c70f844647Maksymilian Osowski     * and store them in the format that suits itself bests. This method is asynchronous.
874ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski     * The message passed as a parameter is a message that should be sent to its target
884ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski     * when the result finishes obtaining the result.
894ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski     *
904ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski     * @param webview
914ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski     * @param resultObtainedMsg
924ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski     */
937ddc0b7a72aa66d699fecce3d855a6c70f844647Maksymilian Osowski    public abstract void obtainActualResults(WebView webview, Message resultObtainedMsg);
944ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski
954ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski    public abstract void setExpectedImageResult(byte[] expectedResult);
964ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski
9701c1f9d9e9e7ab3a40a9bf27195a434eb0c9bb9bMaksymilian Osowski    public abstract void setExpectedImageResultPath(String relativePath);
9801c1f9d9e9e7ab3a40a9bf27195a434eb0c9bb9bMaksymilian Osowski
9901c1f9d9e9e7ab3a40a9bf27195a434eb0c9bb9bMaksymilian Osowski    public abstract String getExpectedImageResultPath();
10001c1f9d9e9e7ab3a40a9bf27195a434eb0c9bb9bMaksymilian Osowski
1014ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski    public abstract void setExpectedTextResult(String expectedResult);
1024ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski
10301c1f9d9e9e7ab3a40a9bf27195a434eb0c9bb9bMaksymilian Osowski    public abstract void setExpectedTextResultPath(String relativePath);
10401c1f9d9e9e7ab3a40a9bf27195a434eb0c9bb9bMaksymilian Osowski
10501c1f9d9e9e7ab3a40a9bf27195a434eb0c9bb9bMaksymilian Osowski    public abstract String getExpectedTextResultPath();
10601c1f9d9e9e7ab3a40a9bf27195a434eb0c9bb9bMaksymilian Osowski
1074ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski    /**
1084ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski     * Returns result's image data that can be written to the disk. It can be null
1094ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski     * if there is an error of some sort or for example the test times out.
1104ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski     *
1114ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski     * <p> Some tests will not provide data (like text tests)
1124ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski     *
1134ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski     * @return
1144ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski     *      results image data
1154ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski     */
1164ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski    public abstract byte[] getActualImageResult();
1174ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski
1184ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski    /**
1194ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski     * Returns result's text data. It can be null
1204ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski     * if there is an error of some sort or for example the test times out.
1213c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski     *
1223c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski     * @return
1234ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski     *      results text data
1243c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski     */
1254ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski    public abstract String getActualTextResult();
1263c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski
1273c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski    /**
1288a6def02473ee4fbffcd1b34173daf751d316202Steve Block     * Returns the status code representing the result of comparing actual and expected results.
1293c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski     *
1303c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski     * @return
1318a6def02473ee4fbffcd1b34173daf751d316202Steve Block     *      the status code from comparing actual and expected results
1323c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski     */
1334ee7f4b19489f4dc9b87e90d1e5c7742cfa7ebe0Maksymilian Osowski    public abstract ResultCode getResultCode();
1343c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski
1353c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski    /**
1368a6def02473ee4fbffcd1b34173daf751d316202Steve Block     * Returns whether this test crashed.
1378a6def02473ee4fbffcd1b34173daf751d316202Steve Block     *
1388a6def02473ee4fbffcd1b34173daf751d316202Steve Block     * @return
1398a6def02473ee4fbffcd1b34173daf751d316202Steve Block     *      whether this test crashed
1408a6def02473ee4fbffcd1b34173daf751d316202Steve Block     */
1418a6def02473ee4fbffcd1b34173daf751d316202Steve Block    public abstract boolean didCrash();
1428a6def02473ee4fbffcd1b34173daf751d316202Steve Block
1438a6def02473ee4fbffcd1b34173daf751d316202Steve Block    /**
1448a6def02473ee4fbffcd1b34173daf751d316202Steve Block     * Returns whether this test timed out.
1458a6def02473ee4fbffcd1b34173daf751d316202Steve Block     *
1468a6def02473ee4fbffcd1b34173daf751d316202Steve Block     * @return
1478a6def02473ee4fbffcd1b34173daf751d316202Steve Block     *      whether this test timed out
1488a6def02473ee4fbffcd1b34173daf751d316202Steve Block     */
1498a6def02473ee4fbffcd1b34173daf751d316202Steve Block    public abstract boolean didTimeOut();
1508a6def02473ee4fbffcd1b34173daf751d316202Steve Block
1518a6def02473ee4fbffcd1b34173daf751d316202Steve Block    /**
1528a6def02473ee4fbffcd1b34173daf751d316202Steve Block     * Sets that this test timed out.
1538a6def02473ee4fbffcd1b34173daf751d316202Steve Block     */
1548a6def02473ee4fbffcd1b34173daf751d316202Steve Block    public abstract void setDidTimeOut();
1558a6def02473ee4fbffcd1b34173daf751d316202Steve Block
1568a6def02473ee4fbffcd1b34173daf751d316202Steve Block    /**
1578a6def02473ee4fbffcd1b34173daf751d316202Steve Block     * Returns whether the test passed.
1588a6def02473ee4fbffcd1b34173daf751d316202Steve Block     *
1598a6def02473ee4fbffcd1b34173daf751d316202Steve Block     * @return
1608a6def02473ee4fbffcd1b34173daf751d316202Steve Block     *      whether the test passed
1618a6def02473ee4fbffcd1b34173daf751d316202Steve Block     */
1628a6def02473ee4fbffcd1b34173daf751d316202Steve Block    public boolean didPass() {
1638a6def02473ee4fbffcd1b34173daf751d316202Steve Block        // Tests that crash can't have timed out or have an actual result.
1648a6def02473ee4fbffcd1b34173daf751d316202Steve Block        assert !(didCrash() && didTimeOut());
1658a6def02473ee4fbffcd1b34173daf751d316202Steve Block        assert !(didCrash() && getResultCode() != ResultCode.NO_ACTUAL_RESULT);
1668a6def02473ee4fbffcd1b34173daf751d316202Steve Block        return !didCrash() && !didTimeOut() && getResultCode() == ResultCode.RESULTS_MATCH;
1678a6def02473ee4fbffcd1b34173daf751d316202Steve Block    }
1688a6def02473ee4fbffcd1b34173daf751d316202Steve Block
1698a6def02473ee4fbffcd1b34173daf751d316202Steve Block    /**
1703c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski     * Return the type of the result data.
1713c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski     *
1723c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski     * @return
1733c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski     *      the type of the result data.
1743c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski     */
1753c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski    public abstract TestType getType();
1763c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski
1775f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski    public abstract String getRelativePath();
1785f0ccd76a88586ce85c17cb4db058934e693a4fcMaksymilian Osowski
1793c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski    /**
1803c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski     * Returns a piece of HTML code that presents a visual diff between a result and
1813c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski     * the expected result.
1823c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski     *
1833c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski     * @return
1843c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski     *      a piece of HTML code with a visual diff between the result and the expected result
1853c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski     */
1863c8ccb384513dd9bae0f98ac516ea36fbaa3173bMaksymilian Osowski    public abstract String getDiffAsHtml();
1877ddc0b7a72aa66d699fecce3d855a6c70f844647Maksymilian Osowski
1887ddc0b7a72aa66d699fecce3d855a6c70f844647Maksymilian Osowski    public abstract Bundle getBundle();
1898a6def02473ee4fbffcd1b34173daf751d316202Steve Block}
190