Sync with 5.2.0
[deliverable/titan.core.git] / regression_test / XML / NegativeTest / uni.ttcn
CommitLineData
970ed795
EL
1/******************************************************************************
2 * Copyright (c) 2000-2014 Ericsson Telecom AB
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 ******************************************************************************/
8module uni
9{
10
11import from ReadXml all;
12import from rec { type Neg; function check_match; };
13
14type union U {
15 integer i,
16 charstring s,
17 record {
18 boolean b,
19 float f
20 } r
21};
22
23external function encU(in U u) return octetstring
24with { extension "prototype(convert) encode(XER:XER_EXTENDED)" };
25
26const U c_plain := {
27 s := "Howdy"
28}
29
30template Nodes t_plain := {
31 // node type , depth, name , value
32 { XML_READER_TYPE_ELEMENT , 0, "U", "", "" },
33 { XML_READER_TYPE_ELEMENT , 1, "s", "", "" },
34 { XML_READER_TYPE_TEXT , 2, "#text", "Howdy", "" },
35 { XML_READER_TYPE_END_ELEMENT, 1, "s", "", "" },
36 { XML_READER_TYPE_END_ELEMENT, 0, "U", "", "" }
37}
38
39type octetstring myoctetstring;
40
41const U c_replace_other := {
42 s := "Howdy"
43}
44with {
45 // Replacing i when s is selected: NOP
46 erroneous (i) "value := 'BABEFACE'O "
47}
48
49const U c_plain_r := {
50 r := { true, 3.141592 }
51}
52
53template Nodes t_plain_r := {
54 // node type , depth, name , value
55 { XML_READER_TYPE_ELEMENT , 0, "U", "", "" },
56 { XML_READER_TYPE_ELEMENT , 1, "r", "", "" },
57
58 { XML_READER_TYPE_ELEMENT , 2, "b", "", "" },
59 { XML_READER_TYPE_TEXT , 3, "#text", "true", "" },
60 { XML_READER_TYPE_END_ELEMENT, 2, "b", "", "" },
61
62 { XML_READER_TYPE_ELEMENT , 2, "f", "", "" },
63 { XML_READER_TYPE_TEXT , 3, "#text", "3.141592", "" },
64 { XML_READER_TYPE_END_ELEMENT, 2, "f", "", "" },
65
66 { XML_READER_TYPE_END_ELEMENT, 1, "r", "", "" },
67 { XML_READER_TYPE_END_ELEMENT, 0, "U", "", "" }
68}
69
70testcase u_plain() runs on Neg
71{
72 var octetstring o;
73 var Nodes nodes;
74
75 o := encU(c_plain);
76 nodes := gather(o, ignore_ws);
77 check_match(nodes, t_plain);
78
79 o := encU(c_replace_other);
80 nodes := gather(o, ignore_ws);
81 // Result unaffected by modifying a non-selected alternative
82 check_match(nodes, t_plain);
83
84 o := encU(c_plain_r);
85 nodes := gather(o, ignore_ws);
86 check_match(nodes, t_plain_r);
87}
88
89/*-------------------- REPLACE --------------------*/
90
91const U c_replace := {
92 s := "Howdy"
93}
94with {
95 erroneous (s) "value := 'BABEFACE'O "
96}
97
98const U c_replace2 := { // "named"
99 s := "Howdy"
100}
101with {
102 erroneous (s) "value := myoctetstring : 'BABEFACE'O "
103}
104
105template Nodes t_replace := {
106 // node type , depth, name , value
107 { XML_READER_TYPE_ELEMENT , 0, "U", "", "" },
108 { XML_READER_TYPE_ELEMENT , 1, "OCTET_STRING", "", "" },
109 { XML_READER_TYPE_TEXT , 2, "#text", "BABEFACE", "" },
110 { XML_READER_TYPE_END_ELEMENT, 1, "OCTET_STRING", "", "" },
111 { XML_READER_TYPE_END_ELEMENT, 0, "U", "", "" }
112}
113
114template Nodes t_replace2 := {
115 // node type , depth, name , value
116 { XML_READER_TYPE_ELEMENT , 0, "U", "", "" },
117 { XML_READER_TYPE_ELEMENT , 1, "myoctetstring", "", "" },
118 { XML_READER_TYPE_TEXT , 2, "#text", "BABEFACE", "" },
119 { XML_READER_TYPE_END_ELEMENT, 1, "myoctetstring", "", "" },
120 { XML_READER_TYPE_END_ELEMENT, 0, "U", "", "" }
121}
122
123const U c_replace_raw := {
124 s := "Howdy"
125}
126with {
127 //before no-no with union ): erroneous (i) "before := 'BABEFACE'O "
128 erroneous (s) "value(raw) := 'E29795E280BFE280BFE29795'O "
129}
130
131//const U c_replace_raw := {
132// s := "Howdy"
133//}
134//with {
135// erroneous (s) "value(raw) := '111000101001011110010101111000101000000010111111111000101000000010111111111000101001011110010101'B "
136//}
137// Alas, this is not accepted; bitstring can only be used as an erroneous raw value for RAW or PER, not XER
138
139template Nodes t_replace_raw := {
140 // node type , depth, name , value
141 { XML_READER_TYPE_ELEMENT , 0, "U", "", "" },
142
143 { XML_READER_TYPE_TEXT , 1, "#text", "\n" & "\xE2\x97\x95" & "\xE2\x80\xBF" & "\xE2\x80\xBF" & "\xE2\x97\x95" /* & "\t\t"*/, "" },
144
145 { XML_READER_TYPE_END_ELEMENT, 0, "U", "", "" }
146}
147
148testcase u_replace() runs on Neg
149{
150 var octetstring o;
151 var Nodes nodes;
152
153 o := encU(c_replace);
154 nodes := gather(o, ignore_ws);
155 check_match(nodes, t_replace);
156
157 o := encU(c_replace2);
158 nodes := gather(o, ignore_ws);
159 check_match(nodes, t_replace2);
160
161 o := encU(c_replace_raw);
162 nodes := gather(o, ignore_ws);
163 check_match(nodes, t_replace_raw);
164}
165
166// -- -- -- -- -- -- -- -- before embedded field
167
168const U c_before_r_f := c_plain_r
169with {
170 erroneous (r.f) "before := myoctetstring : 'BABEFACE'O"
171}
172
173template Nodes t_before_r_f modifies t_plain_r :=
174{
175 -,-,-,-,-, // <U>, <r>, <b>, #text, </b>
176 // perturbation: an extra element
177 { XML_READER_TYPE_ELEMENT , 2, "myoctetstring", "", "" }, //5
178 { XML_READER_TYPE_TEXT , 3, "#text", "BABEFACE", "" },
179 { XML_READER_TYPE_END_ELEMENT, 2, "myoctetstring", "", "" },
180 t_plain_r[5],
181 t_plain_r[6],
182 t_plain_r[7],
183 t_plain_r[8],
184 t_plain_r[9]
185}
186
187testcase u_before_embedded() runs on Neg
188{
189 var octetstring o;
190 var Nodes nodes;
191
192 o := encU(c_before_r_f);
193 nodes := gather(o, ignore_ws);
194 check_match(nodes, t_before_r_f);
195}
196
197// Do not forget to add the testcase to the one and only control part in rec_of.ttcn
198}
199with {
200 encode "XML"
201}
This page took 0.051271 seconds and 5 git commands to generate.