2 puts "0027241: Create a complete test case to verify reading of all attribute types from MDTV-Standard document"
6 # Set Create_Doc to 1 to generate the document (using OCCT 6.9.1 or earlier)
9 set test_file_name bug27241_ocaf_all_attributes.std
11 set test_name "OCC26961"
13 set test_real 123.456e-7
14 set test_int_arr {10 20}
15 set test_real_arr {1.1 3.14 5.4e18}
16 set test_extstr_arr {"sample string 1" "string 2"}
17 set test_bool_arr {0 1}
18 set test_ref_arr {"0:1:2:3:2" "0:1:2:3:1"}
19 set test_byte_arr {15 25}
20 set test_map {1 5 2 10}
21 set test_map_sorted {1 2 5 10}
22 set test_named_ints {i1 1 i2 2}
23 set test_named_reals {r1 1.1 r2 2.2}
24 set test_named_strings {s1 string1 s2 string2}
25 set test_named_bytes {b1 65 b2 66}
27 set test_guid "00000000-0000-0000-2222-000000000000"
28 set test_comment "Sample document containing various attributes"
29 set test_string "Sample string"
30 set test_expr "2*pi*r"
31 set test_var1 "0:1:2:3:2"
32 set test_var2 "0:1:2:3:1"
33 set test_point "111 222 333"
34 set test_axisPos "10 10 30"
35 set test_axisDir "11 22 33"
36 set test_plane "15 25 35"
37 set test_boxXYZ "10 20 30"
44 set test_driver_id "2a96b604-ec8b-11d0-bee7-080009dc3333"
46 set test_color AQUAMARINE4
48 set test_positionX 100
49 set test_positionY 200
50 set test_positionZ 300
52 proc checkarray {name array expected} {
53 set exp_len [llength $expected]
54 if {$exp_len != [llength $array]} {puts "Error: invalid $name"; return}
55 for {set i 0} {$i < $exp_len} {incr i} {
56 if {[lindex $array $i] != [lindex $expected $i]} {puts "Error: invalid $name"}
64 # Normal test execution
68 Open [locate_data_file $test_file_name] D
72 if [catch {GetInteger D 0:1:1 i}] {puts "Error: Integer not found"
73 } elseif {[dval i] != $test_int} {puts "Error: invalid Integer"}
75 if [catch {GetReal D 0:1:1 r}] {puts "Error: Real not found"
76 } elseif {[dval r] != $test_real} {puts "Error: invalid Real"}
78 if [catch {set name [GetName D 0:1:1]}] {puts "Error: Name not found"
79 } elseif {$name != $test_name} {puts "Error: invalid Name"}
81 if [catch {set comment [GetComment D 0:1:1]}] {puts "Error: Comment not found"
82 } elseif {$comment != $test_comment} {puts "Error: invalid Comment"}
84 if [catch {set string [GetAsciiString D 0:1:1]}] {puts "Error: AsciiString not found"}
88 if [catch {NewTag D 0:1:2}] {puts "Error: TagSource not found"}
92 if [catch {set ref [GetReference D 0:1:3]}] {puts "Error: Reference not found"
93 } elseif {[string compare $ref $test_ref] != 0} {puts "Error: invalid Reference"}
97 if [catch {AddDirectory D 0:1:2:1}] {puts "Error: Directory not found"}
101 if [catch {set guid [GetUAttribute D 0:1:2:2 $test_guid]}] {puts "Error: no label for UAttribute"
102 } elseif {$guid == "No UAttribute Attribute on label"} {puts "Error: $guid"
103 } elseif {$guid != $test_guid} {puts "Error: invalid UAttribute"}
107 if [regexp "no such attribute" [GetVariable D $test_var2 is_const units]] {puts "Error: Variable not found"
108 } elseif {$is_const != 0 || $units != "mm"} {puts "Error: invalid Variable"}
112 if [catch {set rel_dump [DumpRelation D 0:1:2:3]}] {puts "Error: Relation not found"
113 } elseif ![regexp "$test_expr.*$test_var1 $test_var2" $rel_dump] {
114 puts "Error: invalid Relation"}
118 if [catch {set root_node [RootNode D 0:1:2:4]}] {puts "Error: TreeNode not found"
119 } elseif {$root_node != "0:1:2:4"} {puts "Error: invalid TreeNode"}
123 if [catch {set iarr [GetIntArray D 0:1:1]}] {puts "Error: IntegerArray not found"
124 } else { checkarray "IntegerArray" $iarr $test_int_arr }
126 if [catch {set rarr [GetRealArray D 0:1:1]}] {puts "Error: RealArray not found"
127 } else { checkarray "RealArray" $rarr $test_real_arr }
129 if [catch {set esarr [GetExtStringArray D 0:1:1]}] {puts "Error: ExtStringArray not found"
130 } else { checkarray "ExtStringArray" $esarr [join $test_extstr_arr " "]}
132 if [catch {set boolarr [GetBooleanArray D 0:1:1]}] {puts "Error: BooleanArray not found"
133 } else { checkarray "BooleanArray" $boolarr $test_bool_arr }
135 if [catch {set refarr [GetRefArray D 0:1:1]}] {puts "Error: ReferenceArray not found"
136 } else { checkarray "ReferenceArray" $refarr $test_ref_arr }
138 if [catch {set bytearr [GetByteArray D 0:1:1]}] {puts "Error: ByteArray not found"
139 } else { checkarray "ByteArray" $bytearr $test_byte_arr }
143 if [catch {set ilst [GetIntegerList D 0:1:1]}] {puts "Error: IntegerList not found"
144 } else { checkarray "IntegerList" $ilst $test_int_arr }
146 if [catch {set rlst [GetRealList D 0:1:1]}] {puts "Error: RealList not found"
147 } else { checkarray "RealList" $rlst $test_real_arr }
149 if [catch {set eslst [GetExtStringList D 0:1:1]}] {puts "Error: ExtStringList not found"
150 } else { checkarray "ExtStringList" $eslst [join $test_extstr_arr " "]}
152 if [catch {set blst [GetBooleanList D 0:1:1]}] {puts "Error: BooleanList not found"
153 } else { checkarray "BooleanList" $blst $test_bool_arr }
155 if [catch {set reflst [GetReferenceList D 0:1:1]}] {puts "Error: ReferenceList not found"
156 } else { checkarray "ReferenceList" $reflst $test_ref_arr }
160 if [catch {set map [GetIntPackedMap D 0:1:1]}] {puts "Error: IntPackedMap not found"
161 } else { checkarray "IntPackedMap" $map $test_map_sorted }
165 if [catch {GetNDIntegers D 0:1:4}] {puts "Error: NamedData not found"}
166 if [catch {GetNDReals D 0:1:4}] {puts "Error: NamedData not found"}
167 if [catch {GetNDStrings D 0:1:4}] {puts "Error: NamedData not found"}
168 if [catch {GetNDBytes D 0:1:4}] {puts "Error: NamedData not found"}
169 if [catch {GetNDIntArrays D 0:1:4}] {puts "Error: NamedData not found"}
170 if [catch {GetNDRealArrays D 0:1:4}] {puts "Error: NamedData not found"}
174 eval box Box $test_boxXYZ $test_boxDX $test_boxDY $test_boxDZ
175 if [catch {GetShape D 0:1:6 b}] {puts "Error: NamedShape not found"
176 } elseif {[bounding b -dump] != [bounding Box -dump]} {puts "Error: invalid NamedShape"
179 checkprops b -l [expr $test_boxDX * 8 + $test_boxDY * 8 + $test_boxDZ * 8]
180 checkprops b -s [expr $test_boxDX * $test_boxDY * 2 + $test_boxDY * $test_boxDZ * 2 + $test_boxDX * $test_boxDZ * 2]
181 checkprops b -v [expr $test_boxDX * $test_boxDY * $test_boxDZ]
186 if [catch {GetPoint D 0:1:5:1 pnt}] {puts "Error: Point not found"}
187 if [catch {GetAxis D 0:1:5:2 axs}] {puts "Error: Axis not found"}
188 if [catch {GetPlane D 0:1:5:3 pln}] {puts "Error: Plane not found"}
192 if [catch {set geom_t [GetGeometryType D 0:1:6]}] {puts "Error: Geometry not found"
193 } elseif {$geom_t != $test_geom_t} { puts "Error: invalid Geometry" }
197 if [catch {set constraint [GetConstraint D 0:1:1]}] {puts "Error: Constraint not found"
198 } elseif {$constraint != "0:1:1 COINCIDENT G_1 (0:1:6) "} { puts "Error: invalid Constraint" }
202 if [catch {set pattern [DumpPattern D 0:1:1]}] {puts "Error: PatternStd not found"
203 } elseif {$pattern != "0:1:1 signature = 5 Mirror (0:1:6)"} { puts "Error: invalid PatternStd" }
207 if [catch {GetFunction D 0:1:1 fguid failureNb}] {puts "Error: Function not found"
208 } elseif {$fguid != $test_guid || $failureNb != $test_failure} { puts "Error: invalid Function" }
213 if [catch {set driver [AISDriver D 0:1:1]}] {puts "Error: AISPresentation not found"
214 } elseif [catch {set transp [AISTransparency D 0:1:1]}] {puts "Error: AISPresentation not found"
215 } elseif [catch {set color [AISColor D 0:1:1]}] {puts "Error: AISPresentation not found"
216 } elseif [catch {set material [AISMaterial D 0:1:1]}] {puts "Error: AISPresentation not found"
217 } elseif {$driver != $test_driver_id} { puts "Error: invalid AISPresentation"
218 } elseif {[lindex [split $transp "\n"] 1] != $test_transp} { puts "Error: invalid AISPresentation"
219 } elseif {[lindex [split $color "\n"] 1] != $test_color} { puts "Error: invalid AISPresentation"
220 } elseif {[lindex [split $material "\n"] 1] != $test_material} { puts "Error: invalid AISPresentation" }
224 if [catch {GetPosition D 0:1:1 posX posY posZ}] {puts "Error: Position not found"
225 } elseif {$posX != $test_positionX} { puts "Error: invalid Position"
226 } elseif {$posY != $test_positionY} { puts "Error: invalid Position"
227 } elseif {$posZ != $test_positionZ} { puts "Error: invalid Position" }
231 # Creation of the document to be used in normal execution.
232 # Note! This will work only on OCCT versions older than 7.0,
233 # as since 7.0 there is no more storage driver for old persistence.
235 puts "Creating document"
236 NewDocument D MDTV-Standard
239 SetInteger D 0:1:1 $test_int
240 SetReal D 0:1:1 $test_real
241 SetName D 0:1:1 $test_name
242 SetComment D 0:1:1 $test_comment
243 SetAsciiString D 0:1:1 $test_string
249 SetReference D 0:1:3 $test_ref
252 NewDirectory D 0:1:2:1
255 SetUAttribute D 0:1:2:2 $test_guid
258 SetVariable D $test_var2 0 mm
259 SetVariable D $test_var1 1 ""
262 SetRelation D 0:1:2:3 "2*pi*r" $test_var1 $test_var2
268 eval SetIntArray D 0:1:1 1 1 2 $test_int_arr
269 eval SetRealArray D 0:1:1 1 1 3 $test_real_arr
270 eval SetExtStringArray D 0:1:1 1 1 2 $test_extstr_arr
271 eval SetBooleanArray D 0:1:1 1 1 2 $test_bool_arr
272 eval SetRefArray D 0:1:1 1 2 $test_ref_arr
273 eval SetByteArray D 0:1:1 1 1 2 $test_byte_arr
276 eval SetIntegerList D 0:1:1 $test_int_arr
277 eval SetRealList D 0:1:1 $test_real_arr
278 eval SetExtStringList D 0:1:1 $test_extstr_arr
279 eval SetBooleanList D 0:1:1 $test_bool_arr
280 eval SetReferenceList D 0:1:1 $test_ref_arr
283 eval SetIntPackedMap D 0:1:1 1 $test_map
286 eval SetNDataIntegers D 0:1:4 2 $test_named_ints
287 eval SetNDataReals D 0:1:4 2 $test_named_reals
288 eval SetNDataStrings D 0:1:4 2 $test_named_strings
289 eval SetNDataBytes D 0:1:4 2 $test_named_bytes
290 eval SetNDataIntArrays D 0:1:4 ia 2 $test_int_arr
291 eval SetNDataRealArrays D 0:1:4 ra 3 $test_real_arr
294 eval box Box $test_boxXYZ $test_boxDX $test_boxDY $test_boxDZ
298 eval point Point $test_point
299 SetPoint D 0:1:5:1 Point
302 eval line Axis $test_axisPos $test_axisDir
303 SetAxis D 0:1:5:2 Axis
306 eval plane Plane $test_plane
307 SetPlane D 0:1:5:3 Plane
310 SetGeometry D 0:1:6 $test_geom_t
313 SetConstraint D 0:1:1 equal 0:1:6
316 SetPattern D 0:1:1 5 0:1:6
319 SetFunction D 0:1:1 $test_guid $test_failure
323 AISSet D 0:1:1 $test_driver
324 AISTransparency D 0:1:1 $test_transp
325 AISColor D 0:1:1 $test_color
326 AISMaterial D 0:1:1 $test_material
329 SetPosition D 0:1:1 $test_positionX $test_positionY $test_positionZ
331 SaveAs D $imagedir/ocaf_all_attributes.std
332 puts "Document saved to $imagedir/$test_file_name"