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 ******************************************************************************/
11 import from ReadXml all;
12 import from rec { type Neg; function check_match; };
23 external function encU(in U u) return octetstring
24 with { extension "prototype(convert) encode(XER:XER_EXTENDED)" };
30 template 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", "", "" }
39 type octetstring myoctetstring;
41 const U c_replace_other := {
45 // Replacing i when s is selected: NOP
46 erroneous (i) "value := 'BABEFACE'O "
49 const U c_plain_r := {
50 r := { true, 3.141592 }
53 template Nodes t_plain_r := {
54 // node type , depth, name , value
55 { XML_READER_TYPE_ELEMENT , 0, "U", "", "" },
56 { XML_READER_TYPE_ELEMENT , 1, "r", "", "" },
58 { XML_READER_TYPE_ELEMENT , 2, "b", "", "" },
59 { XML_READER_TYPE_TEXT , 3, "#text", "true", "" },
60 { XML_READER_TYPE_END_ELEMENT, 2, "b", "", "" },
62 { XML_READER_TYPE_ELEMENT , 2, "f", "", "" },
63 { XML_READER_TYPE_TEXT , 3, "#text", "3.141592", "" },
64 { XML_READER_TYPE_END_ELEMENT, 2, "f", "", "" },
66 { XML_READER_TYPE_END_ELEMENT, 1, "r", "", "" },
67 { XML_READER_TYPE_END_ELEMENT, 0, "U", "", "" }
70 testcase u_plain() runs on Neg
76 nodes := gather(o, ignore_ws);
77 check_match(nodes, t_plain);
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);
85 nodes := gather(o, ignore_ws);
86 check_match(nodes, t_plain_r);
89 /*-------------------- REPLACE --------------------*/
91 const U c_replace := {
95 erroneous (s) "value := 'BABEFACE'O "
98 const U c_replace2 := { // "named"
102 erroneous (s) "value := myoctetstring : 'BABEFACE'O "
105 template 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", "", "" }
114 template 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", "", "" }
123 const U c_replace_raw := {
127 //before no-no with union ): erroneous (i) "before := 'BABEFACE'O "
128 erroneous (s) "value(raw) := 'E29795E280BFE280BFE29795'O "
131 //const U c_replace_raw := {
135 // erroneous (s) "value(raw) := '111000101001011110010101111000101000000010111111111000101000000010111111111000101001011110010101'B "
137 // Alas, this is not accepted; bitstring can only be used as an erroneous raw value for RAW or PER, not XER
139 template Nodes t_replace_raw := {
140 // node type , depth, name , value
141 { XML_READER_TYPE_ELEMENT , 0, "U", "", "" },
143 { XML_READER_TYPE_TEXT , 1, "#text", "\n" & "\xE2\x97\x95" & "\xE2\x80\xBF" & "\xE2\x80\xBF" & "\xE2\x97\x95" /* & "\t\t"*/, "" },
145 { XML_READER_TYPE_END_ELEMENT, 0, "U", "", "" }
148 testcase u_replace() runs on Neg
153 o := encU(c_replace);
154 nodes := gather(o, ignore_ws);
155 check_match(nodes, t_replace);
157 o := encU(c_replace2);
158 nodes := gather(o, ignore_ws);
159 check_match(nodes, t_replace2);
161 o := encU(c_replace_raw);
162 nodes := gather(o, ignore_ws);
163 check_match(nodes, t_replace_raw);
166 // -- -- -- -- -- -- -- -- before embedded field
168 const U c_before_r_f := c_plain_r
170 erroneous (r.f) "before := myoctetstring : 'BABEFACE'O"
173 template Nodes t_before_r_f modifies t_plain_r :=
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", "", "" },
187 testcase u_before_embedded() runs on Neg
192 o := encU(c_before_r_f);
193 nodes := gather(o, ignore_ws);
194 check_match(nodes, t_before_r_f);
197 // Do not forget to add the testcase to the one and only control part in rec_of.ttcn