10bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets/* 20bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets * Copyright (C) 2010 The Android Open Source Project 30bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets * 40bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets * Licensed under the Apache License, Version 2.0 (the "License"); 50bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets * you may not use this file except in compliance with the License. 60bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets * You may obtain a copy of the License at 70bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets * 80bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets * http://www.apache.org/licenses/LICENSE-2.0 90bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets * 100bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets * Unless required by applicable law or agreed to in writing, software 110bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets * distributed under the License is distributed on an "AS IS" BASIS, 120bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets * See the License for the specific language governing permissions and 140bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets * limitations under the License. 150bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets */ 160bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets 17bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viverettepackage com.android.rs.test_v11; 180bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinetsimport android.content.Context; 19bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport android.renderscript.RenderScript.RSMessageHandler; 20bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport android.util.Log; 21bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viverette 2262693d74bb01e67e62a6601c4a79ac67136a458fshepshapardpublic class UnitTest extends Thread { 233a9bd3acec72820f173ebf52a1cb7bb1d52eeabfSergey Vasilinets public String name; 243a9bd3acec72820f173ebf52a1cb7bb1d52eeabfSergey Vasilinets public int result; 253a9bd3acec72820f173ebf52a1cb7bb1d52eeabfSergey Vasilinets private ScriptField_ListAllocs_s.Item mItem; 263a9bd3acec72820f173ebf52a1cb7bb1d52eeabfSergey Vasilinets private RSTestCore mRSTC; 273a9bd3acec72820f173ebf52a1cb7bb1d52eeabfSergey Vasilinets private boolean msgHandled; 283a9bd3acec72820f173ebf52a1cb7bb1d52eeabfSergey Vasilinets protected Context mCtx; 293a9bd3acec72820f173ebf52a1cb7bb1d52eeabfSergey Vasilinets 3062693d74bb01e67e62a6601c4a79ac67136a458fshepshapard /* These constants must match those in shared.rsh */ 310bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets public static final int RS_MSG_TEST_PASSED = 100; 320bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets public static final int RS_MSG_TEST_FAILED = 101; 338dd2658f5c9c58c197b7d02d8214af22a5de60abShane Farmer 340bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets private static int numTests = 0; 3562693d74bb01e67e62a6601c4a79ac67136a458fshepshapard public int testID; 3662693d74bb01e67e62a6601c4a79ac67136a458fshepshapard 370bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets protected UnitTest(RSTestCore rstc, String n, int initResult, Context ctx) { 380bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets super(); 3962693d74bb01e67e62a6601c4a79ac67136a458fshepshapard mRSTC = rstc; 4062693d74bb01e67e62a6601c4a79ac67136a458fshepshapard name = n; 410bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets msgHandled = false; 420bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets mCtx = ctx; 430bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets result = initResult; 440bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets testID = numTests++; 450bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets } 4662693d74bb01e67e62a6601c4a79ac67136a458fshepshapard 470bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets protected UnitTest(RSTestCore rstc, String n, Context ctx) { 4891df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets this(rstc, n, 0, ctx); 4991df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets } 5091df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets 5191df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets protected UnitTest(RSTestCore rstc, Context ctx) { 5291df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets this (rstc, "<Unknown>", ctx); 5391df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets } 5491df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets 5591df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets protected UnitTest(Context ctx) { 5691df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets this (null, ctx); 5791df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets } 5891df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets 5962693d74bb01e67e62a6601c4a79ac67136a458fshepshapard protected RSMessageHandler mRsMessage = new RSMessageHandler() { 6091df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets public void run() { 610bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets if (result == 0) { 6291df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets switch (mID) { 630bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets case RS_MSG_TEST_PASSED: 6491df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets result = 1; 6591df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets break; 6691df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets case RS_MSG_TEST_FAILED: 6791df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets result = -1; 680bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets break; 690bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets default: 700bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets android.util.Log.v("RenderScript", "Unit test got unexpected message"); 7191df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets return; 7291df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets } 7391df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets } 7491df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets 7591df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets if (mItem != null) { 7691df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets mItem.result = result; 7791df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets msgHandled = true; 7891df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets try { 7991df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets mRSTC.refreshTestResults(); 80619b2be303df81e1b807112100d9a0e92f43e951Sergey Vasilinets } 8191df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets catch (IllegalStateException e) { 8291df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets /* Ignore the case where our message receiver has been 8391df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets disconnected. This happens when we leave the application 840bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets before it finishes running all of the unit tests. */ 850bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets } 860bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets } 873a9bd3acec72820f173ebf52a1cb7bb1d52eeabfSergey Vasilinets } 883a9bd3acec72820f173ebf52a1cb7bb1d52eeabfSergey Vasilinets }; 890bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets 903a9bd3acec72820f173ebf52a1cb7bb1d52eeabfSergey Vasilinets public void waitForMessage() { 910bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets while (!msgHandled) { 920bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets yield(); 930bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets } 940bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets } 950bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets 960bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets public void setItem(ScriptField_ListAllocs_s.Item item) { 9791df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets mItem = item; 980bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets } 990bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets 10091df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets public void run() { 1010bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets /* This method needs to be implemented for each subclass */ 1020bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets if (mRSTC != null) { 1030bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets mRSTC.refreshTestResults(); 1040bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets } 1050bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets } 10691df2cf6dacb3035df3f6b98e895cdc9f025553aSergey Vasilinets} 1070bbdd57e9654789f419177f1ff90221d5872b116Sergey Vasilinets