1 5 package org.h2.test.unit; 6 7 import java.io.StringReader ; 8 import java.util.Random ; 9 10 import org.h2.test.TestBase; 11 import org.h2.util.ScriptReader; 12 13 public class TestScriptReader extends TestBase { 14 15 public void test() throws Exception { 16 testCommon(); 17 testRandom(); 18 } 19 20 private void testRandom() throws Exception { 21 int len = getSize(1000, 10000); 22 Random random = new Random (10); 23 for(int i=0; i<len; i++) { 24 int l = random.nextInt(10); 25 String [] sql = new String [l]; 26 StringBuffer buff = new StringBuffer (); 27 for(int j=0; j<l; j++) { 28 sql[j] = randomStatement(random); 29 buff.append(sql[j]); 30 if(j<l - 1) { 31 buff.append(";"); 32 } 33 } 34 String s = buff.toString(); 35 StringReader reader = new StringReader (s); 36 ScriptReader source = new ScriptReader(reader); 37 for(int j=0; j<l; j++) { 38 String e = source.readStatement(); 39 String c = sql[j]; 40 if(c.length() == 0 && j == l-1) { 41 c = null; 42 } 43 check(e, c); 44 } 45 check(source.readStatement(), null); 46 } 47 } 48 49 private String randomStatement(Random random) { 50 StringBuffer buff = new StringBuffer (); 51 int len = random.nextInt(5); 52 for(int i=0; i<len; i++) { 53 switch(random.nextInt(10)) { 54 case 0: { 55 int l= random.nextInt(4); 56 String [] ch=new String []{"\n", "\r", " ", "*", "a", "0"}; 57 for(int j=0; j<l; j++) { 58 buff.append(ch[random.nextInt(ch.length)]); 59 } 60 break; 61 } 62 case 1: { 63 buff.append('\''); 64 int l= random.nextInt(4); 65 String [] ch=new String []{";", "\n", "\r", "--", "//", "/", "-", "*", "/*", "*/", "\""}; 66 for(int j=0; j<l; j++) { 67 buff.append(ch[random.nextInt(ch.length)]); 68 } 69 buff.append('\''); 70 break; 71 } 72 case 2: { 73 buff.append('"'); 74 int l= random.nextInt(4); 75 String [] ch=new String []{";", "\n", "\r", "--", "//", "/", "-", "*", "/*", "*/", "\'"}; 76 for(int j=0; j<l; j++) { 77 buff.append(ch[random.nextInt(ch.length)]); 78 } 79 buff.append('"'); 80 break; 81 } 82 case 3: { 83 buff.append('-'); 84 if(random.nextBoolean()) { 85 String [] ch=new String []{"\n", "\r", "*", "a", " "}; 86 int l= 1 + random.nextInt(4); 87 for(int j=0; j<l; j++) { 88 buff.append(ch[random.nextInt(ch.length)]); 89 } 90 } else { 91 buff.append('-'); 92 String [] ch=new String []{";", "-", "//", "/*", "*/", "a"}; 93 int l= random.nextInt(4); 94 for(int j=0; j<l; j++) { 95 buff.append(ch[random.nextInt(ch.length)]); 96 } 97 buff.append('\n'); 98 } 99 break; 100 } 101 case 4: { 102 buff.append('/'); 103 if(random.nextBoolean()) { 104 String [] ch=new String []{"\n", "\r", "a", " ", "- "}; 105 int l= 1 + random.nextInt(4); 106 for(int j=0; j<l; j++) { 107 buff.append(ch[random.nextInt(ch.length)]); 108 } 109 } else { 110 buff.append('*'); 111 String [] ch=new String []{";", "-", "//", "/* ", "--", "\n", "\r", "a"}; 112 int l= random.nextInt(4); 113 for(int j=0; j<l; j++) { 114 buff.append(ch[random.nextInt(ch.length)]); 115 } 116 buff.append("*/"); 117 } 118 break; 119 } 120 } 121 } 122 return buff.toString(); 123 } 124 125 private void testCommon() throws Exception { 126 String s = 127 "a;';';\";\";--;\n;/*;\n*/;//;\na;"; 128 StringReader reader = new StringReader (s); 129 ScriptReader source = new ScriptReader(reader); 130 check(source.readStatement(),"a"); 131 check(source.readStatement(),"';'"); 132 check(source.readStatement(),"\";\""); 133 check(source.readStatement(),"--;\n"); 134 check(source.readStatement(),"/*;\n*/"); 135 check(source.readStatement(),"//;\na"); 136 check(source.readStatement(), null); 137 } 138 139 } 140 | Popular Tags |