Skip to content

Commit 69c8928

Browse files
committed
add more tests
1 parent ba2a295 commit 69c8928

15 files changed

+448
-4
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package net.zetetic.tests.support;
2+
3+
import net.sqlcipher.Cursor;
4+
import net.sqlcipher.database.SQLiteDatabase;
5+
import net.zetetic.tests.SQLCipherTest;
6+
7+
public class BindBooleanRawQueryTest extends SupportTest {
8+
@Override
9+
public boolean execute(SQLiteDatabase database) {
10+
database.execSQL("create table t1(a,b);");
11+
database.execSQL("insert into t1(a,b) values(?, ?);", new Object[]{"one for the money", true});
12+
Cursor cursor = database.rawQuery("select * from t1 where b = ?;", new Object[]{true});
13+
if(cursor != null){
14+
if(cursor.moveToFirst()) {
15+
String a = cursor.getString(0);
16+
int b = cursor.getInt(1);
17+
cursor.close();
18+
return a.equals("one for the money") && b == 1;
19+
}
20+
}
21+
return false;
22+
}
23+
24+
@Override
25+
public String getName() {
26+
return "Bind Boolean for RawQuery Test";
27+
}
28+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package net.zetetic.tests.support;
2+
3+
import net.sqlcipher.Cursor;
4+
import net.sqlcipher.database.SQLiteDatabase;
5+
import net.zetetic.tests.SQLCipherTest;
6+
import java.security.SecureRandom;
7+
import java.util.Arrays;
8+
9+
public class BindByteArrayRawQueryTest extends SupportTest {
10+
@Override
11+
public boolean execute(SQLiteDatabase database) {
12+
13+
SecureRandom random = new SecureRandom();
14+
byte[] randomData = new byte[20];
15+
random.nextBytes(randomData);
16+
database.execSQL("create table t1(a,b);");
17+
database.execSQL("insert into t1(a,b) values(?, ?);", new Object[]{"one for the money", randomData});
18+
Cursor cursor = database.rawQuery("select * from t1 where b = ?;", new Object[]{randomData});
19+
if(cursor != null){
20+
if(cursor.moveToFirst()) {
21+
String a = cursor.getString(0);
22+
byte[] b = cursor.getBlob(1);
23+
cursor.close();
24+
return a.equals("one for the money") && Arrays.equals(randomData, b);
25+
}
26+
}
27+
return false;
28+
}
29+
30+
@Override
31+
public String getName() {
32+
return "Bind Byte Array for RawQuery Test";
33+
}
34+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package net.zetetic.tests.support;
2+
3+
import net.sqlcipher.Cursor;
4+
import net.sqlcipher.database.SQLiteDatabase;
5+
import net.zetetic.tests.SQLCipherTest;
6+
7+
public class BindDoubleRawQueryTest extends SupportTest {
8+
@Override
9+
public boolean execute(SQLiteDatabase database) {
10+
database.execSQL("create table t1(a,b);");
11+
database.execSQL("insert into t1(a,b) values(?, ?);", new Object[]{"one for the money", 2.0d});
12+
Cursor cursor = database.rawQuery("select * from t1 where b = ?;", new Object[]{2.0d});
13+
if(cursor != null){
14+
if(cursor.moveToFirst()) {
15+
String a = cursor.getString(0);
16+
Double b = cursor.getDouble(1);
17+
cursor.close();
18+
return a.equals("one for the money") && b == 2.0d;
19+
}
20+
}
21+
return false;
22+
}
23+
24+
@Override
25+
public String getName() {
26+
return "Bind Double for RawQuery Test";
27+
}
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package net.zetetic.tests.support;
2+
3+
import net.sqlcipher.Cursor;
4+
import net.sqlcipher.database.SQLiteDatabase;
5+
import net.zetetic.tests.SQLCipherTest;
6+
7+
public class BindFloatRawQueryTest extends SupportTest {
8+
@Override
9+
public boolean execute(SQLiteDatabase database) {
10+
database.execSQL("create table t1(a,b);");
11+
database.execSQL("insert into t1(a,b) values(?, ?);", new Object[]{"one for the money", 2.25f});
12+
Cursor cursor = database.rawQuery("select * from t1 where b = ?;", new Object[]{2.25f});
13+
if(cursor != null){
14+
if(cursor.moveToFirst()) {
15+
String a = cursor.getString(0);
16+
float b = cursor.getFloat(1);
17+
cursor.close();
18+
return a.equals("one for the money") && b == 2.25f;
19+
}
20+
}
21+
return false;
22+
}
23+
24+
@Override
25+
public String getName() {
26+
return "Bind Float for RawQuery Test";
27+
}
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package net.zetetic.tests.support;
2+
3+
import net.sqlcipher.Cursor;
4+
import net.sqlcipher.database.SQLiteDatabase;
5+
import net.zetetic.tests.SQLCipherTest;
6+
7+
public class BindLongRawQueryTest extends SupportTest {
8+
@Override
9+
public boolean execute(SQLiteDatabase database) {
10+
database.execSQL("create table t1(a,b);");
11+
database.execSQL("insert into t1(a,b) values(?, ?);", new Object[]{"one for the money", 2L});
12+
Cursor cursor = database.rawQuery("select * from t1 where b = ?;", new Object[]{2L});
13+
if(cursor != null){
14+
if(cursor.moveToFirst()) {
15+
String a = cursor.getString(0);
16+
long b = cursor.getLong(1);
17+
cursor.close();
18+
return a.equals("one for the money") && b == 2L;
19+
}
20+
}
21+
return false;
22+
}
23+
24+
@Override
25+
public String getName() {
26+
return "Bind Long for RawQuery Test";
27+
}
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package net.zetetic.tests.support;
2+
3+
import net.sqlcipher.Cursor;
4+
import net.sqlcipher.database.SQLiteDatabase;
5+
import net.zetetic.tests.SQLCipherTest;
6+
7+
public class BindStringRawQueryTest extends SupportTest {
8+
@Override
9+
public boolean execute(SQLiteDatabase database) {
10+
database.execSQL("create table t1(a,b);");
11+
database.execSQL("insert into t1(a,b) values(?, ?);", new Object[]{"one for the money", "two for the show"});
12+
Cursor cursor = database.rawQuery("select * from t1 where b = ?;", new Object[]{"two for the show"});
13+
if(cursor != null){
14+
if(cursor.moveToFirst()) {
15+
String a = cursor.getString(0);
16+
String b = cursor.getString(1);
17+
cursor.close();
18+
return a.equals("one for the money") && b.equals("two for the show");
19+
}
20+
}
21+
return false;
22+
}
23+
24+
@Override
25+
public String getName() {
26+
return "Bind String for RawQuery Test";
27+
}
28+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package net.zetetic.tests.support;
2+
3+
import android.util.Log;
4+
import net.sqlcipher.database.SQLiteDatabase;
5+
import net.sqlcipher.database.SQLiteException;
6+
import net.sqlcipher.database.SQLiteStatement;
7+
import net.zetetic.ZeteticApplication;
8+
import net.zetetic.tests.SQLCipherTest;
9+
10+
public class CompileStatementSyntaxErrorMessageTest extends SupportTest {
11+
12+
@Override
13+
public boolean execute(SQLiteDatabase database) {
14+
try {
15+
SQLiteStatement ignored = database.compileStatement("INSERT INTO mytable (mydata) VALUES");
16+
} catch (SQLiteException e) {
17+
Log.v(ZeteticApplication.TAG, "EXPECTED RESULT: DID throw SQLiteException", e);
18+
String message = e.getMessage();
19+
setMessage(message);
20+
// TBD missing error code etc.
21+
if (!message.matches("incomplete input: , while compiling: INSERT INTO mytable \\(mydata\\) VALUES")) {
22+
Log.e(ZeteticApplication.TAG, "NOT EXPECTED: INCORRECT exception message: " + message);
23+
return false;
24+
}
25+
return true;
26+
} catch (Exception e) {
27+
Log.e(ZeteticApplication.TAG, "NOT EXPECTED: DID throw other exception", e);
28+
return false;
29+
}
30+
31+
return false;
32+
}
33+
34+
@Override
35+
public String getName() {
36+
return "Compile statement syntax error message Test";
37+
}
38+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package net.zetetic.tests.support;
2+
3+
import android.util.Log;
4+
import net.sqlcipher.database.SQLiteConstraintException;
5+
import net.sqlcipher.database.SQLiteDatabase;
6+
import net.sqlcipher.database.SQLiteStatement;
7+
import net.zetetic.ZeteticApplication;
8+
import net.zetetic.tests.SQLCipherTest;
9+
10+
public class ExecuteInsertConstraintErrorMessageTest extends SupportTest {
11+
12+
@Override
13+
public boolean execute(SQLiteDatabase database) {
14+
database.execSQL("CREATE TABLE tt(a UNIQUE, b)");
15+
database.execSQL("INSERT INTO tt VALUES (101, 'Alice')");
16+
try {
17+
SQLiteStatement insertStatement = database.compileStatement("INSERT INTO tt VALUES (101, 'Betty')");
18+
long ignored = insertStatement.executeInsert();
19+
} catch (SQLiteConstraintException e) {
20+
Log.v(ZeteticApplication.TAG, "EXPECTED RESULT: DID throw SQLiteConstraintException", e);
21+
String message = e.getMessage();
22+
setMessage(message);
23+
if (!message.matches("error code 19: UNIQUE constraint failed: tt\\.a")) {
24+
Log.e(ZeteticApplication.TAG, "NOT EXPECTED: INCORRECT exception message: " + message);
25+
return false;
26+
}
27+
return true;
28+
} catch (Exception e) {
29+
Log.e(ZeteticApplication.TAG, "NOT EXPECTED: DID throw other exception", e);
30+
return false;
31+
}
32+
33+
return false;
34+
}
35+
36+
@Override
37+
public String getName() {
38+
return "Execute insert constraint error message Test";
39+
}
40+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package net.zetetic.tests.support;
2+
3+
import net.sqlcipher.Cursor;
4+
import net.sqlcipher.database.SQLiteDatabase;
5+
import net.zetetic.tests.SQLCipherTest;
6+
7+
public class FTS5Test extends SupportTest {
8+
@Override
9+
public boolean execute(SQLiteDatabase database) {
10+
database.execSQL("CREATE VIRTUAL TABLE email USING fts5(sender, title, body);");
11+
database.execSQL("insert into email(sender, title, body) values(?, ?, ?);",
12+
new Object[]{"foo@bar.com", "Test Email", "This is a test email message."});
13+
Cursor cursor = database.rawQuery("select * from email where email match ?;", new String[]{"test"});
14+
if(cursor != null){
15+
cursor.moveToFirst();
16+
return cursor.getString(cursor.getColumnIndex("sender")).equals("foo@bar.com");
17+
}
18+
return false;
19+
}
20+
21+
@Override
22+
public String getName() {
23+
return "FTS5 Test";
24+
}
25+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package net.zetetic.tests.support;
2+
3+
import android.content.ContentValues;
4+
import net.sqlcipher.database.SQLiteDatabase;
5+
import net.zetetic.tests.SQLCipherTest;
6+
7+
public class InsertWithOnConflictTest extends SupportTest {
8+
@Override
9+
public boolean execute(SQLiteDatabase database) {
10+
database.execSQL("create table user(_id integer primary key autoincrement, email text unique not null);");
11+
ContentValues values = new ContentValues();
12+
values.put("email", "foo@bar.com");
13+
long id = database.insertWithOnConflict("user", null, values,
14+
SQLiteDatabase.CONFLICT_IGNORE);
15+
long error = database.insertWithOnConflict("user", null, values,
16+
SQLiteDatabase.CONFLICT_IGNORE);
17+
return id == 1 && error == -1;
18+
}
19+
20+
@Override
21+
public String getName() {
22+
return "Insert with OnConflict";
23+
}
24+
}

0 commit comments

Comments
 (0)