1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License.
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License.
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1799aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilsonpackage libcore.sqlite;
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport SQLite.Database;
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport SQLite.Exception;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport SQLite.Function;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport SQLite.FunctionContext;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport SQLite.Stmt;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport SQLite.TableResult;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.UnsupportedEncodingException;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.SQLException;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.Statement;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.DatabaseCreator;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
3099aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilsonpublic final class OldFunctionContextTest extends OldSQLiteTest {
31f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private Database db = null;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
3499aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson    @Override public void setUp() throws java.lang.Exception {
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super.setUp();
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        db = new Database();
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        db.open(dbFile.getPath(), 0);
3899aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson        Statement st = conn.createStatement();
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        st.execute(DatabaseCreator.CREATE_TABLE2);
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        st.execute(DatabaseCreator.CREATE_TABLE_SIMPLE1);
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        st.close();
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSet_resultString() throws Exception {
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestFCString testString = new TestFCString();
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        db.exec("insert into " + DatabaseCreator.TEST_TABLE2
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + " (ftext) values ('TestInput')", null);
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        db.create_function("test", 1, testString);
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TableResult res = db.get_table("select test(ftext) from "
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.TEST_TABLE2);
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String row[] = (String[]) res.rows.elementAt(0);
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String val = row[0];
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("TestInput", val);
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSet_resultInt() throws Exception {
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestFCInt testInt = new TestFCInt();
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        db.exec("insert into " + DatabaseCreator.SIMPLE_TABLE1
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "  values (1,'" + testInt.intVal + "',3)", null);
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        db.create_function("testInt", 1, testInt);
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TableResult res = db.get_table("select testInt(speed) from "
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.SIMPLE_TABLE1);
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String row[] = (String[]) res.rows.elementAt(0);
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String val = row[0];
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(testInt.intVal, Integer.parseInt(val));
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSet_resultDouble() throws Exception {
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SinFunc testD = new SinFunc();
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        db.exec("insert into " + DatabaseCreator.TEST_TABLE2
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + " (fdouble)  values (" + testD.testDouble + ")", null);
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        db.create_function("testDouble", 1, testD);
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TableResult res = db.get_table("select testDouble(fdouble) from "
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.TEST_TABLE2);
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String row[] = (String[]) res.rows.elementAt(0);
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String val = row[0];
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(testD.testDouble, Double.parseDouble(val));
81f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(testD.functionCalled);
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSet_error() throws Exception {
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestFCError testError = new TestFCError();
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SinFunc testD = new SinFunc();
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        db.exec("insert into " + DatabaseCreator.TEST_TABLE2
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + " (fdouble)  values (" + testD.testDouble + ")", null);
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        db.create_function("testError", 1, testError);
91f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TableResult res = db.get_table("select testError(fdouble) from "
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.TEST_TABLE2);
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        fail("Should get Exception");
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("error in step", e.getMessage());
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
99f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(testD.functionCalled);
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
103f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    public void testSet_resultByteArray() throws Exception, UnsupportedEncodingException {
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Stmt st = null;
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestFCByteArray testBinArrayFnc = new TestFCByteArray();
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String expected = "";
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        expected = "X'" + getHexString(testBinArrayFnc.byteVal) + "'";
108f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // setup
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        db.exec("create table testBinaryData (binVal BINARY) ;", null);
111f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        st = db.prepare("insert into testBinaryData values (?)");
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        st.bind(1, testBinArrayFnc.byteVal);
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        st.step();
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        db.create_function("testBinArray", 1, testBinArrayFnc);
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TableResult res = db
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .get_table("select testBinArray(binVal) from testBinaryData");
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String row[] = (String[]) res.rows.elementAt(0);
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String val = row[0];
124f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(expected.equalsIgnoreCase(val));
126f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(testBinArrayFnc.functionCalled);
128f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } finally {
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //teardown
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            db.exec("drop table testBinaryData;", null);
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
13699aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson     * ZeroBlob not supported
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSet_result_zeroblob() throws Exception,
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            UnsupportedEncodingException {
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Stmt st = null;
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestFCZeroBlob testZeroBlobFnc = new TestFCZeroBlob();
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] byteVal = {(byte) 1, (byte) 2, (byte) 3};
143f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
144f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // setup
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        db.exec("create table testBinaryData (binVal BINARY) ;", null);
147f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        st = db.prepare("insert into testBinaryData values (?)");
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        st.bind(1, byteVal);
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        st.step();
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        db.create_function("testZeroBlob", 0, testZeroBlobFnc);
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TableResult res = db
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .get_table("select testZeroBlob() from testBinaryData");
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TableResult res2 = db.get_table("select zeroblob("
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + testZeroBlobFnc.numBytes + ") from testBinaryData");
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String row[] = (String[]) res.rows.elementAt(0);
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String val = row[0];
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(val);
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(((String[]) res2.rows.elementAt(0))[0], val);
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(testZeroBlobFnc.functionCalled);
167f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } finally  {
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         // teardown
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            db.exec("drop table if exists testBinaryData;", null);
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
17599aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson     * Test Method results in a segmentation fault
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testCount() throws SQLException, Exception {
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestFCCount countTest = new TestFCCount();
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int inputCount = 10;
180f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(countTest.functionCalled);
182f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DatabaseCreator.fillTestTable2(conn, inputCount);
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        db.create_function("testCount", 0, countTest);
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // the invokation of testCount leads to a Segmentation fault
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /*
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TableResult res = db
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .get_table("select testCount() from "+DatabaseCreator.TEST_TABLE2);
189f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String row[] = (String[]) res.rows.elementAt(0);
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String val = row[0];
192f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(countTest.functionCalled);
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(inputCount,Integer.parseInt(val));
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        */
196f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
198f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class TestFCError implements Function {
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean functionCalled = false;
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String errorMsg = "FunctionError";
202f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void function(FunctionContext fc, String args[]) {
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            functionCalled = true;
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fc.set_error(errorMsg);
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20899aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson        public void last_step(FunctionContext fc) {}
20999aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson        public void step(FunctionContext fc, String[] args) {}
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
211f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class TestFCCount implements Function {
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean functionCalled = false;
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public int noOfRows = 0;
215f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void function(FunctionContext fc, String args[]) {
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            functionCalled = true;
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            noOfRows = fc.count();
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fc.set_result(noOfRows);
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
22299aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson        public void last_step(FunctionContext fc) {}
22399aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson        public void step(FunctionContext fc, String[] args) {}
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
225f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class TestFCZeroBlob implements Function {
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public int numBytes = 16;
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean functionCalled = false;
229f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void function(FunctionContext fc, String args[]) {
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            functionCalled = true;
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fc.set_result_zeroblob(numBytes);
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
23599aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson        public void last_step(FunctionContext fc) {}
23699aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson        public void step(FunctionContext fc, String[] args) {}
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
238f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class TestFCString implements Function {
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String testString = "TestString";
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean functionCalled;
242f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void function(FunctionContext fc, String args[]) {
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(args);
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            functionCalled = true;
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fc.set_result(args[0]);
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
24999aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson        public void last_step(FunctionContext fc) {}
25099aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson        public void step(FunctionContext fc, String[] args) {}
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
252f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class TestFCInt implements Function {
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public int intVal = Integer.MAX_VALUE;
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean functionCalled;
256f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void function(FunctionContext fc, String args[]) {
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(args);
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            functionCalled = true;
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fc.set_result(Integer.parseInt(args[0]));
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
26399aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson        public void last_step(FunctionContext fc) {}
26499aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson        public void step(FunctionContext fc, String[] args) {}
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
266f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class TestFCByteArray implements Function {
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] byteVal = {(byte)  1, (byte) 2, (byte) 3};
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean functionCalled;
270f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void function(FunctionContext fc, String args[]) {
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(args);
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            functionCalled = true;
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fc.set_result(args[0].getBytes());
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
27799aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson        public void last_step(FunctionContext fc) {}
27899aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson        public void step(FunctionContext fc, String[] args) {}
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
280f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
28199aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson    class SinFunc implements Function {
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Double testDouble = 3.0;
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean functionCalled = false;
284f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void function(FunctionContext fc, String args[]) {
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Double d = new Double(args[0]);
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            functionCalled = true;
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fc.set_result(d.doubleValue());
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
29199aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson        public void last_step(FunctionContext fc) {}
29299aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson        public void step(FunctionContext fc, String[] args) {}
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
294f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static final byte[] HEX_CHAR_TABLE = {
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte)'0', (byte)'1', (byte)'2', (byte)'3',
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte)'4', (byte)'5', (byte)'6', (byte)'7',
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte)'8', (byte)'9', (byte)'a', (byte)'b',
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte)'c', (byte)'d', (byte)'e', (byte)'f'
300f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes          };
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
30299aa85175f733e896d6cc01e968933a02e997bc2Jesse Wilson    public static String getHexString(byte[] raw)
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws UnsupportedEncodingException {
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] hex = new byte[2 * raw.length];
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int index = 0;
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (byte b : raw) {
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int v = b & 0xFF;
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            hex[index++] = HEX_CHAR_TABLE[v >>> 4];
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            hex[index++] = HEX_CHAR_TABLE[v & 0xF];
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return new String(hex, "ASCII");
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
315