1572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams/*
2572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Copyright (C) 2010 The Android Open Source Project
3572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams *
4572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * you may not use this file except in compliance with the License.
6572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * You may obtain a copy of the License at
7572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams *
8572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams *
10572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Unless required by applicable law or agreed to in writing, software
11572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * See the License for the specific language governing permissions and
14572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * limitations under the License.
15572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams */
16572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
17572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspackage com.android.rs.test_v11;
18572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.content.Context;
19572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.RenderScript.RSMessageHandler;
20572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.util.Log;
21572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
22572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspublic class UnitTest extends Thread {
23572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public String name;
24572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public int result;
25572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private ScriptField_ListAllocs_s.Item mItem;
26572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private RSTestCore mRSTC;
27572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private boolean msgHandled;
28572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    protected Context mCtx;
29572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
30572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    /* These constants must match those in shared.rsh */
31572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public static final int RS_MSG_TEST_PASSED = 100;
32572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public static final int RS_MSG_TEST_FAILED = 101;
33572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
34572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private static int numTests = 0;
35572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public int testID;
36572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
37572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    protected UnitTest(RSTestCore rstc, String n, int initResult, Context ctx) {
38572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        super();
39572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mRSTC = rstc;
40572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        name = n;
41572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        msgHandled = false;
42572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mCtx = ctx;
43572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        result = initResult;
44572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        testID = numTests++;
45572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
46572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
47572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    protected UnitTest(RSTestCore rstc, String n, Context ctx) {
48572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        this(rstc, n, 0, ctx);
49572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
50572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
51572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    protected UnitTest(RSTestCore rstc, Context ctx) {
52572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        this (rstc, "<Unknown>", ctx);
53572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
54572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
55572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    protected UnitTest(Context ctx) {
56572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        this (null, ctx);
57572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
58572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
59572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    protected RSMessageHandler mRsMessage = new RSMessageHandler() {
60572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        public void run() {
61572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            if (result == 0) {
62572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                switch (mID) {
63572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                    case RS_MSG_TEST_PASSED:
64572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                        result = 1;
65572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                        break;
66572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                    case RS_MSG_TEST_FAILED:
67572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                        result = -1;
68572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                        break;
69572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                    default:
70572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                        android.util.Log.v("RenderScript", "Unit test got unexpected message");
71572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                        return;
72572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                }
73572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            }
74572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
75572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            if (mItem != null) {
76572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                mItem.result = result;
77572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                msgHandled = true;
78572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                try {
79572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                    mRSTC.refreshTestResults();
80572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                }
81572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                catch (IllegalStateException e) {
82572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                    /* Ignore the case where our message receiver has been
83572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                       disconnected. This happens when we leave the application
84572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                       before it finishes running all of the unit tests. */
85572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                }
86572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            }
87572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        }
88572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    };
89572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
90572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public void waitForMessage() {
91572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        while (!msgHandled) {
92572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            yield();
93572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        }
94572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
95572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
96572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public void setItem(ScriptField_ListAllocs_s.Item item) {
97572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mItem = item;
98572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
99572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
100572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public void run() {
101572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        /* This method needs to be implemented for each subclass */
102572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        if (mRSTC != null) {
103572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mRSTC.refreshTestResults();
104572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        }
105572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
106572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams}
107