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