1dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines/* 2dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * Copyright (C) 2010 The Android Open Source Project 3dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * 4dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 5dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * you may not use this file except in compliance with the License. 6dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * You may obtain a copy of the License at 7dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * 8dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * http://www.apache.org/licenses/LICENSE-2.0 9dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * 10dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * Unless required by applicable law or agreed to in writing, software 11dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 12dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * See the License for the specific language governing permissions and 14dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * limitations under the License. 15dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines */ 16dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 17dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinespackage com.android.rs.test_v16; 18dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.content.Context; 19dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.util.Log; 20dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.renderscript.RenderScript.RSMessageHandler; 21dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 22dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinespublic class UnitTest extends Thread { 23dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public String name; 24dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public int result; 25dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines private ScriptField_ListAllocs_s.Item mItem; 26dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines private RSTestCore mRSTC; 27dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines private boolean msgHandled; 28dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines protected Context mCtx; 29dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 30dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines /* These constants must match those in shared.rsh */ 31dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public static final int RS_MSG_TEST_PASSED = 100; 32dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public static final int RS_MSG_TEST_FAILED = 101; 33dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 34dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines private static int numTests = 0; 35dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public int testID; 36dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 37dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines protected UnitTest(RSTestCore rstc, String n, int initResult, Context ctx) { 38dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines super(); 39dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mRSTC = rstc; 40dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines name = n; 41dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines msgHandled = false; 42dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mCtx = ctx; 43dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines result = initResult; 44dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines testID = numTests++; 45dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 46dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 47dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines protected UnitTest(RSTestCore rstc, String n, Context ctx) { 48dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines this(rstc, n, 0, ctx); 49dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 50dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 51dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines protected UnitTest(RSTestCore rstc, Context ctx) { 52dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines this (rstc, "<Unknown>", ctx); 53dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 54dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 55dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines protected UnitTest(Context ctx) { 56dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines this (null, ctx); 57dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 58dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 59dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines protected void _RS_ASSERT(String message, boolean b) { 60dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines if(b == false) { 61dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines result = -1; 62dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines Log.e(name, message + " FAILED"); 63dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 64dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 65dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 66dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines protected void updateUI() { 67dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines if (mItem != null) { 68dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mItem.result = result; 69dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines msgHandled = true; 70dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines try { 71dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mRSTC.refreshTestResults(); 72dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 73dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines catch (IllegalStateException e) { 74dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines /* Ignore the case where our message receiver has been 75dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines disconnected. This happens when we leave the application 76dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines before it finishes running all of the unit tests. */ 77dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 78dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 79dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 80dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 81dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines protected RSMessageHandler mRsMessage = new RSMessageHandler() { 82dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public void run() { 83dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines if (result == 0) { 84dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines switch (mID) { 85dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines case RS_MSG_TEST_PASSED: 86dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines result = 1; 87dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines break; 88dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines case RS_MSG_TEST_FAILED: 89dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines result = -1; 90dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines break; 91dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines default: 92dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines RSTest_v16.log("Unit test got unexpected message"); 93dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines return; 94dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 95dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 96dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 97dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines updateUI(); 98dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 99dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines }; 100dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 101dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public void waitForMessage() { 102dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines while (!msgHandled) { 103dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines yield(); 104dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 105dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 106dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 107dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public void setItem(ScriptField_ListAllocs_s.Item item) { 108dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mItem = item; 109dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 110dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 111dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public void run() { 112dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines /* This method needs to be implemented for each subclass */ 113dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines if (mRSTC != null) { 114dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mRSTC.refreshTestResults(); 115dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 116dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 117dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines} 118