1648a1c137663ef7207684d0d7009dd5518942111Stephen Hines/* 2648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * Copyright (C) 2013 The Android Open Source Project 3648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * 4648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 5648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * you may not use this file except in compliance with the License. 6648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * You may obtain a copy of the License at 7648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * 8648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * http://www.apache.org/licenses/LICENSE-2.0 9648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * 10648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * Unless required by applicable law or agreed to in writing, software 11648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 12648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * See the License for the specific language governing permissions and 14648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * limitations under the License. 15648a1c137663ef7207684d0d7009dd5518942111Stephen Hines */ 16648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 17648a1c137663ef7207684d0d7009dd5518942111Stephen Hinespackage com.android.rs.test_compatlegacy; 18648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport android.content.Context; 19648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport android.util.Log; 20648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport android.support.v8.renderscript.RenderScript.RSMessageHandler; 21648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 22648a1c137663ef7207684d0d7009dd5518942111Stephen Hinespublic class UnitTest extends Thread { 23648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public String name; 24648a1c137663ef7207684d0d7009dd5518942111Stephen Hines private int result; 25648a1c137663ef7207684d0d7009dd5518942111Stephen Hines private ScriptField_ListAllocs_s.Item mItem; 26648a1c137663ef7207684d0d7009dd5518942111Stephen Hines private RSTestCore mRSTC; 27648a1c137663ef7207684d0d7009dd5518942111Stephen Hines private boolean msgHandled; 28648a1c137663ef7207684d0d7009dd5518942111Stephen Hines protected Context mCtx; 29648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 30648a1c137663ef7207684d0d7009dd5518942111Stephen Hines /* These constants must match those in shared.rsh */ 31648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public static final int RS_MSG_TEST_PASSED = 100; 32648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public static final int RS_MSG_TEST_FAILED = 101; 33648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 34648a1c137663ef7207684d0d7009dd5518942111Stephen Hines private static int numTests = 0; 35648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public int testID; 36648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 37648a1c137663ef7207684d0d7009dd5518942111Stephen Hines protected UnitTest(RSTestCore rstc, String n, int initResult, Context ctx) { 38648a1c137663ef7207684d0d7009dd5518942111Stephen Hines super(); 39648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mRSTC = rstc; 40648a1c137663ef7207684d0d7009dd5518942111Stephen Hines name = n; 41648a1c137663ef7207684d0d7009dd5518942111Stephen Hines msgHandled = false; 42648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mCtx = ctx; 43648a1c137663ef7207684d0d7009dd5518942111Stephen Hines result = initResult; 44648a1c137663ef7207684d0d7009dd5518942111Stephen Hines testID = numTests++; 45648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 46648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 47648a1c137663ef7207684d0d7009dd5518942111Stephen Hines protected UnitTest(RSTestCore rstc, String n, Context ctx) { 48648a1c137663ef7207684d0d7009dd5518942111Stephen Hines this(rstc, n, 0, ctx); 49648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 50648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 51648a1c137663ef7207684d0d7009dd5518942111Stephen Hines protected UnitTest(RSTestCore rstc, Context ctx) { 52648a1c137663ef7207684d0d7009dd5518942111Stephen Hines this (rstc, "<Unknown>", ctx); 53648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 54648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 55648a1c137663ef7207684d0d7009dd5518942111Stephen Hines protected UnitTest(Context ctx) { 56648a1c137663ef7207684d0d7009dd5518942111Stephen Hines this (null, ctx); 57648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 58648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 59648a1c137663ef7207684d0d7009dd5518942111Stephen Hines protected void _RS_ASSERT(String message, boolean b) { 60648a1c137663ef7207684d0d7009dd5518942111Stephen Hines if(b == false) { 61648a1c137663ef7207684d0d7009dd5518942111Stephen Hines Log.e(name, message + " FAILED"); 62648a1c137663ef7207684d0d7009dd5518942111Stephen Hines failTest(); 63648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 64648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 65648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 66648a1c137663ef7207684d0d7009dd5518942111Stephen Hines private void updateUI() { 67648a1c137663ef7207684d0d7009dd5518942111Stephen Hines if (mItem != null) { 68648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mItem.result = result; 69648a1c137663ef7207684d0d7009dd5518942111Stephen Hines msgHandled = true; 70648a1c137663ef7207684d0d7009dd5518942111Stephen Hines try { 71648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mRSTC.refreshTestResults(); 72648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 73648a1c137663ef7207684d0d7009dd5518942111Stephen Hines catch (IllegalStateException e) { 74648a1c137663ef7207684d0d7009dd5518942111Stephen Hines /* Ignore the case where our message receiver has been 75648a1c137663ef7207684d0d7009dd5518942111Stephen Hines disconnected. This happens when we leave the application 76648a1c137663ef7207684d0d7009dd5518942111Stephen Hines before it finishes running all of the unit tests. */ 77648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 78648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 79648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 80648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 81648a1c137663ef7207684d0d7009dd5518942111Stephen Hines protected RSMessageHandler mRsMessage = new RSMessageHandler() { 82648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public void run() { 83648a1c137663ef7207684d0d7009dd5518942111Stephen Hines if (result == 0) { 84648a1c137663ef7207684d0d7009dd5518942111Stephen Hines switch (mID) { 85648a1c137663ef7207684d0d7009dd5518942111Stephen Hines case RS_MSG_TEST_PASSED: 86648a1c137663ef7207684d0d7009dd5518942111Stephen Hines result = 1; 87648a1c137663ef7207684d0d7009dd5518942111Stephen Hines break; 88648a1c137663ef7207684d0d7009dd5518942111Stephen Hines case RS_MSG_TEST_FAILED: 89648a1c137663ef7207684d0d7009dd5518942111Stephen Hines result = -1; 90648a1c137663ef7207684d0d7009dd5518942111Stephen Hines break; 91648a1c137663ef7207684d0d7009dd5518942111Stephen Hines default: 92648a1c137663ef7207684d0d7009dd5518942111Stephen Hines RSTest.log("Unit test got unexpected message"); 93648a1c137663ef7207684d0d7009dd5518942111Stephen Hines return; 94648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 95648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 96648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 97648a1c137663ef7207684d0d7009dd5518942111Stephen Hines updateUI(); 98648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 99648a1c137663ef7207684d0d7009dd5518942111Stephen Hines }; 100648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 101648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public void waitForMessage() { 102648a1c137663ef7207684d0d7009dd5518942111Stephen Hines while (!msgHandled) { 103648a1c137663ef7207684d0d7009dd5518942111Stephen Hines yield(); 104648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 105648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 106648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 107648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public int getResult() { 108648a1c137663ef7207684d0d7009dd5518942111Stephen Hines return result; 109648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 110648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 111648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public void failTest() { 112648a1c137663ef7207684d0d7009dd5518942111Stephen Hines result = -1; 113648a1c137663ef7207684d0d7009dd5518942111Stephen Hines updateUI(); 114648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 115648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 116648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public void passTest() { 117648a1c137663ef7207684d0d7009dd5518942111Stephen Hines if (result != -1) { 118648a1c137663ef7207684d0d7009dd5518942111Stephen Hines result = 1; 119648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 120648a1c137663ef7207684d0d7009dd5518942111Stephen Hines updateUI(); 121648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 122648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 123648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public String toString() { 124648a1c137663ef7207684d0d7009dd5518942111Stephen Hines String out = name; 125648a1c137663ef7207684d0d7009dd5518942111Stephen Hines if (result == 1) { 126648a1c137663ef7207684d0d7009dd5518942111Stephen Hines out += " - PASSED"; 127648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 128648a1c137663ef7207684d0d7009dd5518942111Stephen Hines else if (result == -1) { 129648a1c137663ef7207684d0d7009dd5518942111Stephen Hines out += " - FAILED"; 130648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 131648a1c137663ef7207684d0d7009dd5518942111Stephen Hines return out; 132648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 133648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 134648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public void setItem(ScriptField_ListAllocs_s.Item item) { 135648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mItem = item; 136648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 137648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 138648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public void run() { 139648a1c137663ef7207684d0d7009dd5518942111Stephen Hines /* This method needs to be implemented for each subclass */ 140648a1c137663ef7207684d0d7009dd5518942111Stephen Hines if (mRSTC != null) { 141648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mRSTC.refreshTestResults(); 142648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 143648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 144648a1c137663ef7207684d0d7009dd5518942111Stephen Hines} 145