|
1 | | -/** |
| 1 | +/* |
2 | 2 | * Copyright 2018 Philipp Salvisberg <philipp.salvisberg@trivadis.com> |
3 | 3 | * |
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
|
15 | 15 | */ |
16 | 16 | package org.utplsql.sqldev.test.parser; |
17 | 17 |
|
18 | | -import org.eclipse.xtend2.lib.StringConcatenation; |
19 | 18 | import org.junit.Assert; |
20 | 19 | import org.junit.Test; |
21 | 20 | import org.utplsql.sqldev.parser.UtplsqlParser; |
22 | 21 |
|
23 | | -@SuppressWarnings("all") |
24 | 22 | public class UtplsqlParserBugFixTest { |
25 | | - @Test |
26 | | - public void issue1MatchingExprInStringLiterals() { |
27 | | - StringConcatenation _builder = new StringConcatenation(); |
28 | | - _builder.append("create or replace package body test_expect_not_to_be_null"); |
29 | | - _builder.newLine(); |
30 | | - _builder.append("is"); |
31 | | - _builder.newLine(); |
32 | | - _builder.append(" "); |
33 | | - _builder.append("gc_object_name constant varchar2(30) := \'t_not_to_be_null_test\';"); |
34 | | - _builder.newLine(); |
35 | | - _builder.append(" "); |
36 | | - _builder.append("gc_nested_table_name constant varchar2(30) := \'tt_not_to_be_null_test\';"); |
37 | | - _builder.newLine(); |
38 | | - _builder.append(" "); |
39 | | - _builder.append("gc_varray_name constant varchar2(30) := \'tv_not_to_be_null_test\';"); |
40 | | - _builder.newLine(); |
41 | | - _builder.newLine(); |
42 | | - _builder.append(" "); |
43 | | - _builder.append("procedure cleanup_expectations"); |
44 | | - _builder.newLine(); |
45 | | - _builder.append(" "); |
46 | | - _builder.append("is"); |
47 | | - _builder.newLine(); |
48 | | - _builder.append(" "); |
49 | | - _builder.append("begin"); |
50 | | - _builder.newLine(); |
51 | | - _builder.append(" "); |
52 | | - _builder.append("ut3.ut_expectation_processor.clear_expectations();"); |
53 | | - _builder.newLine(); |
54 | | - _builder.append(" "); |
55 | | - _builder.append("end;"); |
56 | | - _builder.newLine(); |
57 | | - _builder.newLine(); |
58 | | - _builder.append(" "); |
59 | | - _builder.append("procedure create_types"); |
60 | | - _builder.newLine(); |
61 | | - _builder.append(" "); |
62 | | - _builder.append("is"); |
63 | | - _builder.newLine(); |
64 | | - _builder.append(" "); |
65 | | - _builder.append("pragma autonomous_transaction;"); |
66 | | - _builder.newLine(); |
67 | | - _builder.append(" "); |
68 | | - _builder.append("begin"); |
69 | | - _builder.newLine(); |
70 | | - _builder.append(" "); |
71 | | - _builder.append("execute immediate \'create type \'||gc_object_name||\' is object (dummy number)\';"); |
72 | | - _builder.newLine(); |
73 | | - _builder.append(" "); |
74 | | - _builder.append("execute immediate \' create type \'||gc_nested_table_name||\' is table of number\';"); |
75 | | - _builder.newLine(); |
76 | | - _builder.append(" "); |
77 | | - _builder.append("execute immediate \'"); |
78 | | - _builder.newLine(); |
79 | | - _builder.append(" "); |
80 | | - _builder.append("create type \'||gc_varray_name||\' is varray(1) of number\';"); |
81 | | - _builder.newLine(); |
82 | | - _builder.append(" "); |
83 | | - _builder.append("end;"); |
84 | | - _builder.newLine(); |
85 | | - _builder.newLine(); |
86 | | - _builder.append(" "); |
87 | | - _builder.append("procedure drop_types"); |
88 | | - _builder.newLine(); |
89 | | - _builder.append(" "); |
90 | | - _builder.append("is"); |
91 | | - _builder.newLine(); |
92 | | - _builder.append(" "); |
93 | | - _builder.append("pragma autonomous_transaction;"); |
94 | | - _builder.newLine(); |
95 | | - _builder.append(" "); |
96 | | - _builder.append("begin"); |
97 | | - _builder.newLine(); |
98 | | - _builder.append(" "); |
99 | | - _builder.append("execute immediate \'drop type \'||gc_object_name;"); |
100 | | - _builder.newLine(); |
101 | | - _builder.append(" "); |
102 | | - _builder.append("execute immediate \' drop type \'||gc_nested_table_name;"); |
103 | | - _builder.newLine(); |
104 | | - _builder.append(" "); |
105 | | - _builder.append("execute immediate \'"); |
106 | | - _builder.newLine(); |
107 | | - _builder.append(" "); |
108 | | - _builder.append("drop type \'||gc_varray_name;"); |
109 | | - _builder.newLine(); |
110 | | - _builder.append(" "); |
111 | | - _builder.append("end;"); |
112 | | - _builder.newLine(); |
113 | | - _builder.newLine(); |
114 | | - _builder.append(" "); |
115 | | - _builder.append("procedure blob_not_null"); |
116 | | - _builder.newLine(); |
117 | | - _builder.append(" "); |
118 | | - _builder.append("is"); |
119 | | - _builder.newLine(); |
120 | | - _builder.append(" "); |
121 | | - _builder.append("begin"); |
122 | | - _builder.newLine(); |
123 | | - _builder.append(" "); |
124 | | - _builder.append("--Act"); |
125 | | - _builder.newLine(); |
126 | | - _builder.append(" "); |
127 | | - _builder.append("execute immediate expectations_helpers.unary_expectation_block(\'not_to_be_null\', \'blob\', \'to_blob(\'\'abc\'\')\');"); |
128 | | - _builder.newLine(); |
129 | | - _builder.append(" "); |
130 | | - _builder.append("--Assert"); |
131 | | - _builder.newLine(); |
132 | | - _builder.append(" "); |
133 | | - _builder.append("ut.expect(anydata.convertCollection(ut3.ut_expectation_processor.get_failed_expectations())).to_be_empty();"); |
134 | | - _builder.newLine(); |
135 | | - _builder.append(" "); |
136 | | - _builder.append("end;"); |
137 | | - _builder.newLine(); |
138 | | - _builder.newLine(); |
139 | | - _builder.append("--and so on..."); |
140 | | - _builder.newLine(); |
141 | | - _builder.newLine(); |
142 | | - _builder.append("end;"); |
143 | | - _builder.newLine(); |
144 | | - final String plsql = _builder.toString(); |
145 | | - final UtplsqlParser parser = new UtplsqlParser(plsql); |
146 | | - Assert.assertEquals("test_expect_not_to_be_null.cleanup_expectations", parser.getPathAt(parser.toPosition(7, 1))); |
147 | | - Assert.assertEquals("test_expect_not_to_be_null.create_types", parser.getPathAt(parser.toPosition(13, 1))); |
148 | | - Assert.assertEquals("test_expect_not_to_be_null.drop_types", parser.getPathAt(parser.toPosition(23, 1))); |
149 | | - Assert.assertEquals("test_expect_not_to_be_null.blob_not_null", parser.getPathAt(parser.toPosition(33, 1))); |
150 | | - } |
151 | | - |
152 | | - @Test |
153 | | - public void issue7WrongPositionWithWindowsLineSeparator() { |
154 | | - StringConcatenation _builder = new StringConcatenation(); |
155 | | - _builder.append("create or replace package test_expect_not_to_be_null"); |
156 | | - _builder.newLine(); |
157 | | - _builder.append("is"); |
158 | | - _builder.newLine(); |
159 | | - _builder.append(" "); |
160 | | - _builder.append("--%suite(expectations - not_to_be_null)"); |
161 | | - _builder.newLine(); |
162 | | - _builder.append(" "); |
163 | | - _builder.append("--%suitepath(utplsql.core.expectations.unary)"); |
164 | | - _builder.newLine(); |
165 | | - _builder.newLine(); |
166 | | - _builder.append(" "); |
167 | | - _builder.append("--%aftereach"); |
168 | | - _builder.newLine(); |
169 | | - _builder.append(" "); |
170 | | - _builder.append("procedure cleanup_expectations;"); |
171 | | - _builder.newLine(); |
172 | | - _builder.newLine(); |
173 | | - _builder.append(" "); |
174 | | - _builder.append("--%beforeall"); |
175 | | - _builder.newLine(); |
176 | | - _builder.append(" "); |
177 | | - _builder.append("procedure create_types;"); |
178 | | - _builder.newLine(); |
179 | | - _builder.newLine(); |
180 | | - _builder.append(" "); |
181 | | - _builder.append("--%afterall"); |
182 | | - _builder.newLine(); |
183 | | - _builder.append(" "); |
184 | | - _builder.append("procedure drop_types;"); |
185 | | - _builder.newLine(); |
186 | | - _builder.newLine(); |
187 | | - _builder.append(" "); |
188 | | - _builder.append("--%test(Gives success for not null blob)"); |
189 | | - _builder.newLine(); |
190 | | - _builder.append(" "); |
191 | | - _builder.append("procedure blob_not_null;"); |
192 | | - _builder.newLine(); |
193 | | - _builder.newLine(); |
194 | | - _builder.append(" "); |
195 | | - _builder.append("--%test(Gives success for blob with length 0)"); |
196 | | - _builder.newLine(); |
197 | | - _builder.append(" "); |
198 | | - _builder.append("procedure blob_0_length;"); |
199 | | - _builder.newLine(); |
200 | | - _builder.append(" "); |
201 | | - _builder.newLine(); |
202 | | - _builder.append(" "); |
203 | | - _builder.append("-- ..."); |
204 | | - _builder.newLine(); |
205 | | - _builder.append("end test_expect_not_to_be_null;"); |
206 | | - _builder.newLine(); |
207 | | - _builder.append("/"); |
208 | | - _builder.newLine(); |
209 | | - final String plsql = _builder.toString(); |
210 | | - final UtplsqlParser parser = new UtplsqlParser(plsql); |
211 | | - Assert.assertEquals("test_expect_not_to_be_null.blob_not_null", parser.getPathAt(parser.toPosition(13, 26))); |
212 | | - } |
| 23 | + |
| 24 | + // https://github.com/utPLSQL/utPLSQL-SQLDeveloper/issues/1 |
| 25 | + @Test |
| 26 | + public void issue1MatchingExprInStringLiterals() { |
| 27 | + StringBuilder sb = new StringBuilder(); |
| 28 | + sb.append("create or replace package body test_expect_not_to_be_null\n"); |
| 29 | + sb.append("is\n"); |
| 30 | + sb.append(" gc_object_name constant varchar2(30) := 't_not_to_be_null_test';\n"); |
| 31 | + sb.append(" gc_nested_table_name constant varchar2(30) := 'tt_not_to_be_null_test';\n"); |
| 32 | + sb.append(" gc_varray_name constant varchar2(30) := 'tv_not_to_be_null_test';\n\n"); |
| 33 | + |
| 34 | + sb.append(" procedure cleanup_expectations\n"); |
| 35 | + sb.append(" is\n"); |
| 36 | + sb.append(" begin\n"); |
| 37 | + sb.append(" ut3.ut_expectation_processor.clear_expectations();\n"); |
| 38 | + sb.append(" end;\n\n"); |
| 39 | + |
| 40 | + sb.append(" procedure create_types\n"); |
| 41 | + sb.append(" is"); |
| 42 | + sb.append(" pragma autonomous_transaction;\n"); |
| 43 | + sb.append(" begin\n"); |
| 44 | + sb.append(" execute immediate 'create type '||gc_object_name||' is object (dummy number)'\n;"); |
| 45 | + sb.append(" execute immediate ' create type '||gc_nested_table_name||' is table of number';\n"); |
| 46 | + sb.append(" execute immediate '\n"); |
| 47 | + sb.append(" create type '||gc_varray_name||' is varray(1) of number';\n"); |
| 48 | + sb.append(" end;\n\n"); |
| 49 | + |
| 50 | + sb.append(" procedure drop_types\n"); |
| 51 | + sb.append(" is\n"); |
| 52 | + sb.append(" pragma autonomous_transaction;\n"); |
| 53 | + sb.append(" begin\n"); |
| 54 | + sb.append(" execute immediate 'drop type '||gc_object_name;\n"); |
| 55 | + sb.append(" execute immediate ' drop type '||gc_nested_table_name;\n"); |
| 56 | + sb.append(" execute immediate '\n"); |
| 57 | + sb.append(" drop type '||gc_varray_name;\n"); |
| 58 | + sb.append(" end;\n\n"); |
| 59 | + |
| 60 | + sb.append(" procedure blob_not_null\n"); |
| 61 | + sb.append(" is\n"); |
| 62 | + sb.append(" begin\n"); |
| 63 | + sb.append(" --Act\n"); |
| 64 | + sb.append(" execute immediate expectations_helpers.unary_expectation_block('not_to_be_null', 'blob', 'to_blob(''abc'')');\n"); |
| 65 | + sb.append(" --Assert\n"); |
| 66 | + sb.append(" ut.expect(anydata.convertCollection(ut3.ut_expectation_processor.get_failed_expectations())).to_be_empty();\n"); |
| 67 | + sb.append(" end;\n\n"); |
| 68 | + |
| 69 | + sb.append("--and so on...\n\n"); |
| 70 | + |
| 71 | + sb.append("end;"); |
| 72 | + final String plsql = sb.toString(); |
| 73 | + final UtplsqlParser parser = new UtplsqlParser(plsql); |
| 74 | + Assert.assertEquals("test_expect_not_to_be_null.cleanup_expectations", |
| 75 | + parser.getPathAt(parser.toPosition(7, 1))); |
| 76 | + Assert.assertEquals("test_expect_not_to_be_null.create_types", parser.getPathAt(parser.toPosition(13, 1))); |
| 77 | + // was: '||gc_varray_name||'.drop_types |
| 78 | + Assert.assertEquals("test_expect_not_to_be_null.drop_types", parser.getPathAt(parser.toPosition(23, 1))); |
| 79 | + // was: '||gc_varray_name||'.blob_not_null |
| 80 | + Assert.assertEquals("test_expect_not_to_be_null.blob_not_null", parser.getPathAt(parser.toPosition(33, 1))); |
| 81 | + } |
| 82 | + |
| 83 | + @Test |
| 84 | + // https://github.com/utPLSQL/utPLSQL-SQLDeveloper/issues/7 |
| 85 | + public void issue7WrongPositionWithWindowsLineSeparator() { |
| 86 | + StringBuilder sb = new StringBuilder(); |
| 87 | + sb.append("create or replace package test_expect_not_to_be_null\n"); |
| 88 | + sb.append("is\n"); |
| 89 | + sb.append(" --%suite(expectations - not_to_be_null)\n"); |
| 90 | + sb.append(" --%suitepath(utplsql.core.expectations.unary)\n\n"); |
| 91 | + |
| 92 | + sb.append(" --%aftereach\n"); |
| 93 | + sb.append(" procedure cleanup_expectations;\n\n"); |
| 94 | + |
| 95 | + sb.append(" --%beforeall\n"); |
| 96 | + sb.append(" procedure create_types;\n\n"); |
| 97 | + |
| 98 | + sb.append(" --%afterallv"); |
| 99 | + sb.append(" procedure drop_types;\n\n"); |
| 100 | + |
| 101 | + sb.append(" --%test(Gives success for not null blob)\n"); |
| 102 | + sb.append(" procedure blob_not_null;\n\n"); |
| 103 | + |
| 104 | + sb.append(" --%test(Gives success for blob with length 0)\n"); |
| 105 | + sb.append(" procedure blob_0_length;\n\n"); |
| 106 | + |
| 107 | + sb.append(" -- ...\n"); |
| 108 | + sb.append("end test_expect_not_to_be_null;\n"); |
| 109 | + sb.append("/\n"); |
| 110 | + final String plsql = sb.toString(); |
| 111 | + final UtplsqlParser parser = new UtplsqlParser(plsql); |
| 112 | + Assert.assertEquals("test_expect_not_to_be_null.blob_not_null", parser.getPathAt(parser.toPosition(13, 26))); |
| 113 | + } |
213 | 114 | } |
0 commit comments