141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines/* 241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * Copyright (C) 2010 The Android Open Source Project 341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * 441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * you may not use this file except in compliance with the License. 641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * You may obtain a copy of the License at 741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * 841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * http://www.apache.org/licenses/LICENSE-2.0 941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * 1041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * Unless required by applicable law or agreed to in writing, software 1141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 1241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * See the License for the specific language governing permissions and 1441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * limitations under the License. 1541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines */ 1641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 1741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinespackage com.android.rs.test_v14; 1841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.content.Context; 1941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.util.Log; 2041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.renderscript.RenderScript.RSMessageHandler; 2141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 2241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinespublic class UnitTest extends Thread { 2341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public String name; 2441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public int result; 2541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines private ScriptField_ListAllocs_s.Item mItem; 2641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines private RSTestCore mRSTC; 2741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines private boolean msgHandled; 2841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines protected Context mCtx; 2941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 3041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines /* These constants must match those in shared.rsh */ 3141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public static final int RS_MSG_TEST_PASSED = 100; 3241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public static final int RS_MSG_TEST_FAILED = 101; 3341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 3441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines private static int numTests = 0; 3541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public int testID; 3641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 3741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines protected UnitTest(RSTestCore rstc, String n, int initResult, Context ctx) { 3841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines super(); 3941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mRSTC = rstc; 4041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines name = n; 4141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines msgHandled = false; 4241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mCtx = ctx; 4341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines result = initResult; 4441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines testID = numTests++; 4541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 4641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 4741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines protected UnitTest(RSTestCore rstc, String n, Context ctx) { 4841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines this(rstc, n, 0, ctx); 4941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 5041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 5141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines protected UnitTest(RSTestCore rstc, Context ctx) { 5241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines this (rstc, "<Unknown>", ctx); 5341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 5441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 5541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines protected UnitTest(Context ctx) { 5641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines this (null, ctx); 5741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 5841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 5941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines protected void _RS_ASSERT(String message, boolean b) { 6041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines if(b == false) { 6141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines result = -1; 6241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines Log.e(name, message + " FAILED"); 6341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 6441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 6541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 6641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines protected void updateUI() { 6741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines if (mItem != null) { 6841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mItem.result = result; 6941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines msgHandled = true; 7041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines try { 7141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mRSTC.refreshTestResults(); 7241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 7341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines catch (IllegalStateException e) { 7441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines /* Ignore the case where our message receiver has been 7541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines disconnected. This happens when we leave the application 7641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines before it finishes running all of the unit tests. */ 7741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 7841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 7941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 8041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 8141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines protected RSMessageHandler mRsMessage = new RSMessageHandler() { 8241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public void run() { 8341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines if (result == 0) { 8441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines switch (mID) { 8541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines case RS_MSG_TEST_PASSED: 8641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines result = 1; 8741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines break; 8841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines case RS_MSG_TEST_FAILED: 8941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines result = -1; 9041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines break; 9141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines default: 9241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines RSTest_v14.log("Unit test got unexpected message"); 9341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines return; 9441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 9541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 9641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 9741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines updateUI(); 9841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 9941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines }; 10041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 10141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public void waitForMessage() { 10241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines while (!msgHandled) { 10341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines yield(); 10441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 10541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 10641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 10741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public void setItem(ScriptField_ListAllocs_s.Item item) { 10841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mItem = item; 10941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 11041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 11141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public void run() { 11241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines /* This method needs to be implemented for each subclass */ 11341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines if (mRSTC != null) { 11441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mRSTC.refreshTestResults(); 11541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 11641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 11741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines} 118