Mercurial > hg > monetdb-java
annotate tests/UrlTester.java @ 792:9dea0795a926 monetdbs
Understand so_timeout, treat_clob_as_varchar and treat_blob_as_binary
author | Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com> |
---|---|
date | Fri, 01 Dec 2023 15:47:20 +0100 (17 months ago) |
parents | 4de810c22328 |
children | 9f6fe96c0ead |
rev | line source |
---|---|
789
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
1 import org.monetdb.mcl.net.*; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
2 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
3 import java.io.*; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
4 import java.net.URISyntaxException; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
5 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
6 public class UrlTester { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
7 String filename = null; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
8 int verbose = 0; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
9 BufferedReader reader = null; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
10 int lineno = 0; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
11 int testCount = 0; |
791
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
12 Target target = null; |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
13 Target.Validated validated = null; |
789
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
14 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
15 public UrlTester() { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
16 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
17 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
18 public UrlTester(String filename) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
19 this.filename = filename; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
20 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
21 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
22 public static void main(String[] args) throws Exception { |
791
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
23 checkDefaults(); |
792
9dea0795a926
Understand so_timeout, treat_clob_as_varchar and treat_blob_as_binary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
791
diff
changeset
|
24 checkParameters(); |
791
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
25 |
789
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
26 int exitcode; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
27 UrlTester tester = new UrlTester(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
28 exitcode = tester.parseArgs(args); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
29 if (exitcode == 0) |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
30 exitcode = tester.run(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
31 System.exit(exitcode); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
32 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
33 |
792
9dea0795a926
Understand so_timeout, treat_clob_as_varchar and treat_blob_as_binary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
791
diff
changeset
|
34 |
791
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
35 private static void checkDefaults() { |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
36 Target target = new Target(); |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
37 |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
38 for (Parameter parm: Parameter.values()) { |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
39 Object expected = parm.getDefault(); |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
40 if (expected == null) |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
41 continue; |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
42 Object actual = target.getObject(parm); |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
43 if (!expected.equals(actual)) { |
792
9dea0795a926
Understand so_timeout, treat_clob_as_varchar and treat_blob_as_binary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
791
diff
changeset
|
44 throw new RuntimeException("Default for " + parm.name + " expected to be <" + expected + "> but is <" + actual + ">"); |
9dea0795a926
Understand so_timeout, treat_clob_as_varchar and treat_blob_as_binary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
791
diff
changeset
|
45 } |
9dea0795a926
Understand so_timeout, treat_clob_as_varchar and treat_blob_as_binary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
791
diff
changeset
|
46 } |
9dea0795a926
Understand so_timeout, treat_clob_as_varchar and treat_blob_as_binary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
791
diff
changeset
|
47 } |
9dea0795a926
Understand so_timeout, treat_clob_as_varchar and treat_blob_as_binary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
791
diff
changeset
|
48 |
9dea0795a926
Understand so_timeout, treat_clob_as_varchar and treat_blob_as_binary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
791
diff
changeset
|
49 private static void checkParameters() { |
9dea0795a926
Understand so_timeout, treat_clob_as_varchar and treat_blob_as_binary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
791
diff
changeset
|
50 for (Parameter parm: Parameter.values()) { |
9dea0795a926
Understand so_timeout, treat_clob_as_varchar and treat_blob_as_binary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
791
diff
changeset
|
51 Parameter found = Parameter.forName(parm.name); |
9dea0795a926
Understand so_timeout, treat_clob_as_varchar and treat_blob_as_binary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
791
diff
changeset
|
52 if (parm != found) { |
9dea0795a926
Understand so_timeout, treat_clob_as_varchar and treat_blob_as_binary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
791
diff
changeset
|
53 String foundStr = found != null ? found.name : "null"; |
9dea0795a926
Understand so_timeout, treat_clob_as_varchar and treat_blob_as_binary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
791
diff
changeset
|
54 throw new RuntimeException("Looking up <" + parm.name + ">, found <" + foundStr); |
791
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
55 } |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
56 } |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
57 } |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
58 |
789
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
59 private int parseArgs(String[] args) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
60 for (int i = 0; i < args.length; i++) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
61 String arg = args[i]; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
62 if (arg.startsWith("-")) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
63 int result = handleFlags(arg); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
64 if (result != 0) |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
65 return result; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
66 } else if (filename == null) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
67 filename = arg; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
68 } else { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
69 System.err.println("Unexpected argument: " + arg); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
70 return 1; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
71 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
72 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
73 return 0; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
74 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
75 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
76 private int run() throws IOException { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
77 if (filename != null) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
78 reader = new BufferedReader(new FileReader(filename)); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
79 } else { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
80 String resourceName = "/tests.md"; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
81 InputStream stream = this.getClass().getResourceAsStream(resourceName); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
82 if (stream == null) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
83 System.err.println("Resource " + resourceName + " not found"); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
84 return 1; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
85 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
86 reader = new BufferedReader(new InputStreamReader(stream)); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
87 filename = "tests/tests.md"; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
88 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
89 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
90 try { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
91 processFile(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
92 } catch (Failure e) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
93 System.err.println("" + filename + ":" + lineno + ": " + e.getMessage()); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
94 return 1; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
95 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
96 return 0; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
97 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
98 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
99 private int handleFlags(String arg) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
100 if (!arg.startsWith("-") || arg.equals("-")) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
101 System.err.println("Invalid flag: " + arg); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
102 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
103 String a = arg.substring(1); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
104 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
105 while (!a.isEmpty()) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
106 char letter = a.charAt(0); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
107 a = a.substring(1); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
108 switch (letter) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
109 case 'v': |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
110 verbose++; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
111 break; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
112 default: |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
113 System.err.println("Unexpected flag " + letter + " in " + arg); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
114 return -1; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
115 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
116 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
117 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
118 return 0; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
119 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
120 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
121 private void processFile() throws IOException, Failure { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
122 while (true) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
123 String line = reader.readLine(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
124 if (line == null) |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
125 break; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
126 lineno++; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
127 processLine(line); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
128 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
129 if (verbose >= 1) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
130 System.out.println(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
131 System.out.println("Ran " + testCount + " tests in " + lineno + " lines"); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
132 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
133 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
134 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
135 private void processLine(String line) throws Failure { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
136 line = line.replaceFirst("\\s+$", ""); // remove trailing |
791
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
137 if (target == null && line.equals("```test")) { |
789
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
138 if (verbose >= 2) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
139 if (testCount > 0) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
140 System.out.println(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
141 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
142 System.out.println("\u25B6 " + filename + ":" + lineno); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
143 } |
791
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
144 target = new Target(); |
789
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
145 testCount++; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
146 return; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
147 } |
791
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
148 if (target != null) { |
789
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
149 if (line.equals("```")) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
150 stopProcessing(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
151 return; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
152 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
153 handleCommand(line); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
154 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
155 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
156 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
157 private void stopProcessing() { |
791
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
158 target = null; |
789
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
159 validated = null; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
160 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
161 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
162 private void handleCommand(String line) throws Failure { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
163 if (verbose >= 3) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
164 System.out.println(line); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
165 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
166 if (line.isEmpty()) |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
167 return; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
168 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
169 String[] parts = line.split("\\s+", 2); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
170 String command = parts[0]; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
171 switch (command.toUpperCase()) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
172 case "ONLY": |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
173 handleOnly(true, parts[1]); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
174 return; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
175 case "NOT": |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
176 handleOnly(false, parts[1]); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
177 return; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
178 case "PARSE": |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
179 handleParse(parts[1], null); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
180 return; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
181 case "ACCEPT": |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
182 handleParse(parts[1], true); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
183 return; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
184 case "REJECT": |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
185 handleParse(parts[1], false); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
186 return; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
187 case "SET": |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
188 handleSet(parts[1]); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
189 return; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
190 case "EXPECT": |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
191 handleExpect(parts[1]); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
192 return; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
193 default: |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
194 throw new Failure("Unexpected command: " + command); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
195 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
196 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
197 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
198 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
199 private void handleOnly(boolean mustBePresent, String rest) throws Failure { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
200 boolean found = false; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
201 for (String part: rest.split("\\s+")) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
202 if (part.equals("jdbc")) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
203 found = true; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
204 break; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
205 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
206 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
207 if (found != mustBePresent) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
208 // do not further process this block |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
209 stopProcessing(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
210 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
211 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
212 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
213 private int findEqualSign(String rest) throws Failure { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
214 int index = rest.indexOf('='); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
215 if (index < -1) |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
216 throw new Failure("Expected to find a '='"); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
217 return index; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
218 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
219 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
220 private String splitKey(String rest) throws Failure { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
221 int index = findEqualSign(rest); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
222 return rest.substring(0, index); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
223 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
224 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
225 private String splitValue(String rest) throws Failure { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
226 int index = findEqualSign(rest); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
227 return rest.substring(index + 1); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
228 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
229 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
230 private void handleSet(String rest) throws Failure { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
231 validated = null; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
232 String key = splitKey(rest); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
233 String value = splitValue(rest); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
234 |
791
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
235 try { |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
236 target.setString(key, value); |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
237 } catch (ValidationError e) { |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
238 throw new Failure(e.getMessage()); |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
239 } |
789
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
240 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
241 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
242 private void handleParse(String rest, Boolean shouldSucceed) throws Failure { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
243 URISyntaxException parseError = null; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
244 ValidationError validationError = null; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
245 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
246 validated = null; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
247 try { |
791
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
248 target.barrier(); |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
249 MonetUrlParser.parse(target, rest); |
789
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
250 } catch (URISyntaxException e) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
251 parseError = e; |
791
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
252 } catch (ValidationError e) { |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
253 validationError = e; |
789
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
254 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
255 |
791
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
256 if (parseError == null && validationError == null) { |
789
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
257 try { |
791
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
258 tryValidate(); |
789
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
259 } catch (ValidationError e) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
260 validationError = e; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
261 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
262 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
263 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
264 if (shouldSucceed == Boolean.FALSE) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
265 if (parseError != null || validationError != null) |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
266 return; // happy |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
267 else |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
268 throw new Failure("URL unexpectedly parsed and validated"); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
269 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
270 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
271 if (parseError != null) |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
272 throw new Failure("Parse error: " + parseError); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
273 if (validationError != null && shouldSucceed == Boolean.TRUE) |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
274 throw new Failure("Validation error: " + validationError); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
275 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
276 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
277 private void handleExpect(String rest) throws Failure { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
278 String key = splitKey(rest); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
279 String expectedString = splitValue(rest); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
280 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
281 Object actual = null; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
282 try { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
283 actual = extract(key); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
284 } catch (ValidationError e) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
285 throw new Failure(e.getMessage()); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
286 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
287 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
288 Object expected; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
289 try { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
290 if (actual instanceof Boolean) |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
291 expected = ParameterType.Bool.parse(key, expectedString); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
292 else if (actual instanceof Integer) |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
293 expected = ParameterType.Int.parse(key, expectedString); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
294 else |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
295 expected = expectedString; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
296 } catch (ValidationError e) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
297 String typ = actual.getClass().getName(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
298 throw new Failure("Cannot convert expected value <" + expectedString + "> to " + typ + ": " + e.getMessage()); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
299 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
300 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
301 if (actual.equals(expected)) |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
302 return; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
303 throw new Failure("Expected " + key + "=<" + expectedString + ">, found <" + actual + ">"); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
304 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
305 |
791
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
306 private Target.Validated tryValidate() throws ValidationError { |
789
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
307 if (validated == null) |
791
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
308 validated = target.validate(); |
789
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
309 return validated; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
310 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
311 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
312 private Object extract(String key) throws ValidationError, Failure { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
313 switch (key) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
314 case "valid": |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
315 try { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
316 tryValidate(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
317 } catch (ValidationError e) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
318 return Boolean.FALSE; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
319 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
320 return Boolean.TRUE; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
321 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
322 case "connect_scan": |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
323 return tryValidate().connectScan(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
324 case "connect_port": |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
325 return tryValidate().connectPort(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
326 case "connect_unix": |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
327 return tryValidate().connectUnix(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
328 case "connect_tcp": |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
329 return tryValidate().connectTcp(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
330 case "connect_tls_verify": |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
331 switch (tryValidate().connectVerify()) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
332 case None: return ""; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
333 case Cert: return "cert"; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
334 case Hash: return "hash"; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
335 case System: return "system"; |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
336 default: |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
337 throw new IllegalStateException("unreachable"); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
338 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
339 case "connect_certhash_digits": |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
340 return tryValidate().connectCertHashDigits(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
341 case "connect_binary": |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
342 return tryValidate().connectBinary(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
343 case "connect_clientkey": |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
344 return tryValidate().connectClientKey(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
345 case "connect_clientcert": |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
346 return tryValidate().connectClientCert(); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
347 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
348 default: |
791
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
349 Parameter parm = Parameter.forName(key); |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
350 if (parm != null) |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
351 return target.getObject(parm); |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
352 else |
4de810c22328
Refactor
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
789
diff
changeset
|
353 throw new Failure("Unknown attribute: " + key); |
789
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
354 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
355 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
356 |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
357 private class Failure extends Exception { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
358 public Failure(String message) { |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
359 super(message); |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
360 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
361 } |
88c5b678e974
URL parser passes the tests.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
362 } |