-
Notifications
You must be signed in to change notification settings - Fork 1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added multiple tests for the new parser.
- Loading branch information
1 parent
ec189d9
commit 78444cc
Showing
12 changed files
with
289 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
CREATE TABLE Entity1 | ||
( | ||
Id INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL, | ||
Column1 INTEGER /* This is a block comment and should be ignored */ | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
CREATE TABLE Entity1 | ||
( | ||
Id INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL, | ||
Column1 INTEGER /* This is a block comment 'with a string that doesn't matter' */ | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
CREATE TABLE Entity1 | ||
( | ||
Id INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL, /* This is a block comment -- not a line comment */ Column1 INTEGER | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
-- Create table for migration | ||
CREATE TABLE Entity2 | ||
( | ||
Id INTEGER AUTO_INCREMENT PRIMARY KEY, | ||
Column TEXT NOT NULL, | ||
Column2 INTEGER NULL /* this column is new */ | ||
); | ||
|
||
-- Migrate data | ||
INSERT INTO Entity2 | ||
( | ||
Id, | ||
Column, | ||
Column2 | ||
) | ||
SELECT Id, | ||
Column, | ||
0 -- there's no such value in the old table | ||
FROM Entity; | ||
|
||
-- Rename Entity2 to Entity | ||
DROP TABLE Entity; | ||
ALTER TABLE Entity2 RENAME TO Entity; | ||
|
||
/* Add some --sample-- data */ | ||
INSERT INTO Entity2 | ||
( | ||
Id, | ||
Col/*not sure if anyone would ever be insane enough to do this*/umn, | ||
Column2--, | ||
) | ||
VALUES | ||
( | ||
9001 /* not -- really */, -- almost forgot that comma | ||
42,--23, /* I don't know who messed this up | ||
'string /* string */ -- string'--, | ||
-- 'test' whoops we don't have that many columns | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
CREATE TABLE Entity1 | ||
( | ||
Id INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL, | ||
/* /* /* This is an invalid block comment */ */ | ||
Column1 INTEGER | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
CREATE TABLE Entity1 | ||
( | ||
Id INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL, | ||
Column1 INTEGER -- This is a line comment and should be ignored | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
CREATE TABLE Entity1 | ||
( | ||
Id INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL, | ||
-- This is a line comment and should be ignored */ NonColumn STRING, | ||
Column1 INTEGER | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
CREATE TABLE Entity1 | ||
( | ||
Id INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL, | ||
Column1 INTEGER -- This is a line comment 'with a string that doesn't matter' | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
INSERT INTO Entity | ||
( | ||
Id, | ||
Column1, | ||
Column2 | ||
) | ||
VALUES | ||
( | ||
1, | ||
'/* some text', | ||
'some text */' | ||
); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
INSERT INTO Entity | ||
( | ||
Id, | ||
Column1, | ||
Column2 | ||
) | ||
VALUES | ||
( | ||
1, | ||
'-- some text', | ||
'some text' | ||
); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
CREATE TABLE Entity1 | ||
( | ||
Id INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL, | ||
Column1 INTEGER | ||
); | ||
|
||
CREATE TABLE Entity2 | ||
( | ||
Id INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL, | ||
Column1 INTEGER | ||
) |
180 changes: 180 additions & 0 deletions
180
tests/src/com/activeandroid/test/parser/ParserTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,180 @@ | ||
|
||
package com.activeandroid.test.parser; | ||
|
||
import com.activeandroid.test.ActiveAndroidTestCase; | ||
import com.activeandroid.test.R; | ||
import com.activeandroid.util.SqlParser; | ||
|
||
import java.io.IOException; | ||
import java.io.InputStream; | ||
import java.util.List; | ||
|
||
|
||
public class ParserTest extends ActiveAndroidTestCase { | ||
|
||
private final String sql1 = "CREATE TABLE Entity1 ( Id INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL, Column1 INTEGER )"; | ||
private final String sql2 = "CREATE TABLE Entity2 ( Id INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL, Column1 INTEGER )"; | ||
|
||
private final String invalid = "CREATE TABLE Entity1 ( Id INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL, */ Column1 INTEGER )"; | ||
|
||
private InputStream getStream(int id) { | ||
return this.getContext().getResources().openRawResource(id); | ||
} | ||
|
||
/** | ||
* Should be able to parse a script with two multi-line statments, even if the last statement | ||
* is not terminated by a semicolon. | ||
* @throws IOException | ||
*/ | ||
public void testTwoStatements() throws IOException { | ||
|
||
final InputStream stream = this.getStream(R.raw.two_statements); | ||
List<String> commands = SqlParser.parse(stream); | ||
|
||
assertEquals(2, commands.size()); | ||
assertEquals(sql1, commands.get(0)); | ||
assertEquals(sql2, commands.get(1)); | ||
} | ||
|
||
/** | ||
* Should be able to parse a multi-line statement that has an embedded line comment. | ||
* @throws IOException | ||
*/ | ||
public void testLineComment() throws IOException { | ||
|
||
final InputStream stream = this.getStream(R.raw.line_comment); | ||
List<String> commands = SqlParser.parse(stream); | ||
|
||
assertEquals(1, commands.size()); | ||
assertEquals(sql1, commands.get(0)); | ||
} | ||
|
||
/** | ||
* Should be able to handle a line comment that contains string tokens. | ||
* @throws IOException | ||
*/ | ||
public void testLineCommentWithString() throws IOException { | ||
|
||
final InputStream stream = this.getStream(R.raw.line_comment_with_string); | ||
List<String> commands = SqlParser.parse(stream); | ||
|
||
assertEquals(1, commands.size()); | ||
assertEquals(sql1, commands.get(0)); | ||
} | ||
|
||
/** | ||
* Should ignore a block comment end token inside a line comment. | ||
* @throws IOException | ||
*/ | ||
public void testLineAndBlockEndComment() throws IOException { | ||
|
||
final InputStream stream = this.getStream(R.raw.line_comment_and_block_end); | ||
List<String> commands = SqlParser.parse(stream); | ||
|
||
assertEquals(1, commands.size()); | ||
assertEquals(sql1, commands.get(0)); | ||
} | ||
|
||
/** | ||
* Should be able to handle a block comment. | ||
* @throws IOException | ||
*/ | ||
public void testBlockComment() throws IOException { | ||
|
||
final InputStream stream = this.getStream(R.raw.block_comment); | ||
List<String> commands = SqlParser.parse(stream); | ||
|
||
assertEquals(1, commands.size()); | ||
assertEquals(sql1, commands.get(0)); | ||
} | ||
|
||
/** | ||
* Should be able to handle a block comment that contains string tokens. | ||
* @throws IOException | ||
*/ | ||
public void testBlockCommentWithString() throws IOException { | ||
|
||
final InputStream stream = this.getStream(R.raw.block_comment_with_string); | ||
List<String> commands = SqlParser.parse(stream); | ||
|
||
assertEquals(1, commands.size()); | ||
assertEquals(sql1, commands.get(0)); | ||
} | ||
|
||
/** | ||
* Should ignore a line comment token inside a block comment. | ||
* @throws IOException | ||
*/ | ||
public void testBlockAndLineComment() throws IOException { | ||
|
||
final InputStream stream = this.getStream(R.raw.block_with_line_comment); | ||
List<String> commands = SqlParser.parse(stream); | ||
|
||
assertEquals(1, commands.size()); | ||
assertEquals(sql1, commands.get(0)); | ||
} | ||
|
||
/** | ||
* Should be able to parse a script that incorrectly closes a block comment twice. The | ||
* resulting script is not expected to run, but the parser shouldn't choke on it. | ||
* @throws IOException | ||
*/ | ||
public void testInvalidBlockComment() throws IOException { | ||
|
||
final InputStream stream = this.getStream(R.raw.invalid_block_comment); | ||
List<String> commands = SqlParser.parse(stream); | ||
|
||
assertEquals(1, commands.size()); | ||
assertEquals(invalid, commands.get(0)); | ||
} | ||
|
||
/** | ||
* Should ignore a line comment token inside a string. | ||
* @throws IOException | ||
*/ | ||
public void testStringWithLineComment() throws IOException { | ||
final String sql = "INSERT INTO Entity ( Id, Column1, Column2 ) VALUES ( 1, '-- some text', 'some text' )"; | ||
|
||
final InputStream stream = this.getStream(R.raw.string_with_line_comment); | ||
List<String> commands = SqlParser.parse(stream); | ||
|
||
assertEquals(1, commands.size()); | ||
assertEquals(sql, commands.get(0)); | ||
} | ||
|
||
/** | ||
* Should ignore block comment tokens inside strings. | ||
* @throws IOException | ||
*/ | ||
public void testStringWithBlockComment() throws IOException { | ||
final String sql = "INSERT INTO Entity ( Id, Column1, Column2 ) VALUES ( 1, '/* some text', 'some text */' )"; | ||
|
||
final InputStream stream = this.getStream(R.raw.string_with_block_comment); | ||
List<String> commands = SqlParser.parse(stream); | ||
|
||
assertEquals(1, commands.size()); | ||
assertEquals(sql, commands.get(0)); | ||
} | ||
|
||
/** | ||
* Should be able to handle a script that contains anything nasty I can thing of right now. | ||
* @throws IOException | ||
*/ | ||
public void testComplex() throws IOException { | ||
final String sql1 = "CREATE TABLE Entity2 ( Id INTEGER AUTO_INCREMENT PRIMARY KEY, Column TEXT NOT NULL, Column2 INTEGER NULL )"; | ||
final String sql2 = "INSERT INTO Entity2 ( Id, Column, Column2 ) SELECT Id, Column, 0 FROM Entity"; | ||
final String sql3 = "DROP TABLE Entity"; | ||
final String sql4 = "ALTER TABLE Entity2 RENAME TO Entity"; | ||
final String sql5 = "INSERT INTO Entity2 ( Id, Column, Column2) VALUES ( 9001 , 42, 'string /* string */ -- string' )"; | ||
|
||
final InputStream stream = this.getStream(R.raw.complex); | ||
List<String> commands = SqlParser.parse(stream); | ||
|
||
assertEquals(5, commands.size()); | ||
assertEquals(sql1, commands.get(0)); | ||
assertEquals(sql2, commands.get(1)); | ||
assertEquals(sql3, commands.get(2)); | ||
assertEquals(sql4, commands.get(3)); | ||
assertEquals(sql5, commands.get(4)); | ||
} | ||
} |