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_v11; 1841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.content.Context; 1941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.renderscript.RenderScript.RSMessageHandler; 2041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.util.Log; 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 RSMessageHandler mRsMessage = new RSMessageHandler() { 6041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public void run() { 6141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines if (result == 0) { 6241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines switch (mID) { 6341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines case RS_MSG_TEST_PASSED: 6441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines result = 1; 6541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines break; 6641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines case RS_MSG_TEST_FAILED: 6741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines result = -1; 6841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines break; 6941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines default: 7041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines android.util.Log.v("RenderScript", "Unit test got unexpected message"); 7141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines return; 7241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 7341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 7441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 7541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines if (mItem != null) { 7641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mItem.result = result; 7741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines msgHandled = true; 7841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines try { 7941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mRSTC.refreshTestResults(); 8041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 8141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines catch (IllegalStateException e) { 8241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines /* Ignore the case where our message receiver has been 8341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines disconnected. This happens when we leave the application 8441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines before it finishes running all of the unit tests. */ 8541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 8641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 8741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 8841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines }; 8941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 9041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public void waitForMessage() { 9141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines while (!msgHandled) { 9241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines yield(); 9341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 9441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 9541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 9641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public void setItem(ScriptField_ListAllocs_s.Item item) { 9741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mItem = item; 9841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 9941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 10041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public void run() { 10141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines /* This method needs to be implemented for each subclass */ 10241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines if (mRSTC != null) { 10341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mRSTC.refreshTestResults(); 10441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 10541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 10641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines} 107