1ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines/* 2ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines * Copyright (C) 2010 The Android Open Source Project 3ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines * 4ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 5ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines * you may not use this file except in compliance with the License. 6ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines * You may obtain a copy of the License at 7ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines * 8ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines * http://www.apache.org/licenses/LICENSE-2.0 9ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines * 10ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines * Unless required by applicable law or agreed to in writing, software 11ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 12ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines * See the License for the specific language governing permissions and 14ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines * limitations under the License. 15ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines */ 16ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines 17ff4d70872aa48675a06fc4673c732860c1619758Stephen Hinespackage com.android.rs.test; 186b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liaoimport android.content.Context; 197d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchoukimport android.util.Log; 20bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Samsimport android.renderscript.RenderScript.RSMessageHandler; 21ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines 22ff4d70872aa48675a06fc4673c732860c1619758Stephen Hinespublic class UnitTest extends Thread { 23ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines public String name; 24071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines private int result; 25bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines private ScriptField_ListAllocs_s.Item mItem; 26bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines private RSTestCore mRSTC; 2701f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines private boolean msgHandled; 286b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao protected Context mCtx; 29ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines 30ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines /* These constants must match those in shared.rsh */ 31ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines public static final int RS_MSG_TEST_PASSED = 100; 32ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines public static final int RS_MSG_TEST_FAILED = 101; 33ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines 34ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines private static int numTests = 0; 35ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines public int testID; 36ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines 376b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao protected UnitTest(RSTestCore rstc, String n, int initResult, Context ctx) { 38ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines super(); 39bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines mRSTC = rstc; 40ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines name = n; 4101f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines msgHandled = false; 426b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao mCtx = ctx; 43ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines result = initResult; 44ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines testID = numTests++; 45ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines } 46ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines 476b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao protected UnitTest(RSTestCore rstc, String n, Context ctx) { 486b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao this(rstc, n, 0, ctx); 49bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines } 50bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines 516b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao protected UnitTest(RSTestCore rstc, Context ctx) { 526b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao this (rstc, "<Unknown>", ctx); 53ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines } 54ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines 556b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao protected UnitTest(Context ctx) { 566b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao this (null, ctx); 57ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines } 58ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines 597d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk protected void _RS_ASSERT(String message, boolean b) { 607d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk if(b == false) { 617d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Log.e(name, message + " FAILED"); 62a9431e1018edf307216d800b36d23e37ddfa5128Stephen Hines failTest(); 637d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 647d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 657d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 66071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines private void updateUI() { 677d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk if (mItem != null) { 687d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mItem.result = result; 697d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk msgHandled = true; 707d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk try { 717d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mRSTC.refreshTestResults(); 727d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 737d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk catch (IllegalStateException e) { 747d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk /* Ignore the case where our message receiver has been 757d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk disconnected. This happens when we leave the application 767d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk before it finishes running all of the unit tests. */ 777d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 787d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 797d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 807d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 81bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams protected RSMessageHandler mRsMessage = new RSMessageHandler() { 82ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines public void run() { 83031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines if (result == 0) { 84031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines switch (mID) { 85031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines case RS_MSG_TEST_PASSED: 86031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines result = 1; 87031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines break; 88031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines case RS_MSG_TEST_FAILED: 89031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines result = -1; 90031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines break; 91031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines default: 923d782666d73c3ce0ffb77e71db7309bc3297ecb8Stephen Hines RSTest.log("Unit test got unexpected message"); 93031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines return; 94031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines } 95ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines } 96bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines 977d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk updateUI(); 98ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines } 99ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines }; 100ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines 10101f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines public void waitForMessage() { 10201f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines while (!msgHandled) { 10301f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines yield(); 10401f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines } 10501f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines } 10601f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines 107071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines public int getResult() { 108071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines return result; 109071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines } 110071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines 111071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines public void failTest() { 112071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines result = -1; 113071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines updateUI(); 114071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines } 115071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines 116071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines public void passTest() { 117071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines if (result != -1) { 118071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines result = 1; 119071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines } 120071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines updateUI(); 121071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines } 122071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines 123bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines public void setItem(ScriptField_ListAllocs_s.Item item) { 124bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines mItem = item; 125bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines } 126bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines 127ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines public void run() { 128ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines /* This method needs to be implemented for each subclass */ 129ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines if (mRSTC != null) { 130ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines mRSTC.refreshTestResults(); 131ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines } 132ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines } 133ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines} 134