git.iko.soy/parseable-android
on master help sign in
101 lines 2.7 kB history raw
1package com.parseable.android
3import com.parseable.android.data.escapeIdentifier
4import com.parseable.android.data.escapeLikePattern
5import com.parseable.android.data.escapeSql
6import org.junit.Assert.assertEquals
7import org.junit.Test
9class EscapeSqlTest {
11 @Test
12 fun `escapeSql replaces single quotes`() {
13 assertEquals("it''s", escapeSql("it's"))
14 }
16 @Test
17 fun `escapeSql handles multiple single quotes`() {
18 assertEquals("it''s a ''test''", escapeSql("it's a 'test'"))
19 }
21 @Test
22 fun `escapeSql handles empty string`() {
23 assertEquals("", escapeSql(""))
24 }
26 @Test
27 fun `escapeSql handles string without quotes`() {
28 assertEquals("hello world", escapeSql("hello world"))
29 }
31 @Test
32 fun `escapeSql handles consecutive quotes`() {
33 assertEquals("''''", escapeSql("''"))
34 }
36 @Test
37 fun `escapeSql does not alter double quotes`() {
38 assertEquals("say \"hello\"", escapeSql("say \"hello\""))
39 }
41 @Test
42 fun `escapeSql handles backslash`() {
43 assertEquals("path\\to\\file", escapeSql("path\\to\\file"))
44 }
46 @Test
47 fun `escapeSql handles semicolons`() {
48 assertEquals("; DROP TABLE users --", escapeSql("; DROP TABLE users --"))
49 }
51 @Test
52 fun `escapeSql handles quote injection attempt`() {
53 assertEquals("''; DROP TABLE users --", escapeSql("'; DROP TABLE users --"))
54 }
56 @Test
57 fun `escapeLikePattern escapes percent wildcard`() {
58 assertEquals("100\\%", escapeLikePattern("100%"))
59 }
61 @Test
62 fun `escapeLikePattern escapes underscore wildcard`() {
63 assertEquals("a\\_b", escapeLikePattern("a_b"))
64 }
66 @Test
67 fun `escapeLikePattern escapes backslash before wildcards`() {
68 // Input backslash becomes a doubled backslash; %/_ each gain one escape.
69 assertEquals("\\\\\\%\\_", escapeLikePattern("\\%_"))
70 }
72 @Test
73 fun `escapeLikePattern also escapes single quotes`() {
74 assertEquals("it''s 50\\%", escapeLikePattern("it's 50%"))
75 }
77 @Test
78 fun `escapeLikePattern leaves plain text untouched`() {
79 assertEquals("hello world", escapeLikePattern("hello world"))
80 }
82 @Test
83 fun `escapeIdentifier doubles double quotes`() {
84 assertEquals("foo\"\"bar", escapeIdentifier("foo\"bar"))
85 }
87 @Test
88 fun `escapeIdentifier handles no quotes`() {
89 assertEquals("my_stream", escapeIdentifier("my_stream"))
90 }
92 @Test
93 fun `escapeIdentifier handles empty string`() {
94 assertEquals("", escapeIdentifier(""))
95 }
97 @Test
98 fun `escapeIdentifier handles consecutive double quotes`() {
99 assertEquals("\"\"\"\"", escapeIdentifier("\"\""))
100 }