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