# Set flag dump_file to 1 in order to regenerate script files with actual data # used as reference. In this mode all tests intentionally report failure. set dump_file 0 set aReadMetadataConfig "provider.STEP.OCC.read.productmetadata : 1" set aWriteMetadataConfig "provider.STEP.OCC.write.metadata : 1" # Read original file set path_file [locate_data_file $filename] ReadFile anDocInput_1 $path_file -conf $aReadMetadataConfig #Name for a file to write set aWrittenFileName $imagedir/${casename}_written.step # Write file WriteFile anDocInput_1 $aWrittenFileName -conf $aWriteMetadataConfig set aSize [file size $aWrittenFileName] # Read just written and get its metadata. ReadFile anDocInput_2 $aWrittenFileName -conf $aReadMetadataConfig set aMetaDataBase [ XGetProperties anDocInput_2 ] set aMetaData [format $aMetaDataBase] if { $dump_file == 1 } { set fd_stream [open $dirname/$groupname/$gridname/$casename w] puts $fd_stream "# !!!! This file is generated automatically, do not edit manually! See end script" puts $fd_stream "set filename $filename" puts $fd_stream "set ref_size $aSize" puts $fd_stream "set check_metadata $check_metadata" if {$check_metadata == 1} { puts $fd_stream "set ref_metadata \{$aMetaData\}" } close $fd_stream puts "Error : Running in regeneration mode, comparison was not performed!" } else { set tolerance [expr {min(max(0.001 * $ref_size, 1), 100)}] if {abs($aSize - $ref_size) > $tolerance} { puts "Error: Wrong file size $aSize instead of $ref_size" } if {$check_metadata == 1} { # Compare metadata in files. set aMetaDataLines [split ${aMetaData} "\n"] set aRefMetaDataLines [split ${ref_metadata} "\n"] set aMetaDataLinesCount [llength $aMetaDataLines] set aRefMetaDataLinesCount [llength $aRefMetaDataLines] set aMinLineCount [expr min($aMetaDataLinesCount, $aRefMetaDataLinesCount)] for {set aLineIndex 0} {$aLineIndex < $aMinLineCount} {incr aLineIndex} { set aCurrentMetaDataLine [lindex $aMetaDataLines $aLineIndex] set aCurrentRefMetaDataLine [lindex $aRefMetaDataLines $aLineIndex] if {$aCurrentMetaDataLine != $aCurrentRefMetaDataLine} { puts "Error: Incorrect metadata at line $aLineIndex" puts "Expected: \"$aCurrentRefMetaDataLine\"" puts "Actual: \"$aCurrentMetaDataLine\"" break } } # It is faster to check this condition first, before string-by-string comparison, # however string-by-string comparison would be more informative in case of error. if {$aMetaDataLinesCount != $aRefMetaDataLinesCount} { puts "Error: Line count is metadata doesn't match the expected value." puts "Expected: $aRefMetaDataLinesCount" puts "Actual: $aMetaDataLinesCount" } } } # finalize scenario Close anDocInput_1 Close anDocInput_2 file delete $aWrittenFileName puts "TEST COMPLETED"