]> granicus.if.org Git - graphviz/commitdiff
first cut at new "simple" regression test cases
authorellson <devnull@localhost>
Thu, 21 Sep 2006 19:23:53 +0000 (19:23 +0000)
committerellson <devnull@localhost>
Thu, 21 Sep 2006 19:23:53 +0000 (19:23 +0000)
rtest2/test.tcl [new file with mode: 0755]

diff --git a/rtest2/test.tcl b/rtest2/test.tcl
new file mode 100755 (executable)
index 0000000..45bd5c9
--- /dev/null
@@ -0,0 +1,122 @@
+#!/usr/bin/tclsh
+
+set DOT ../cmd/dot/dot
+set DIFF diff
+set DIFFIMG ../contrib/diffimg/diffimg
+
+set graphdir test_graphs
+set resultdir test_results
+set referencedir test_reference
+
+file delete -force $graphdir $resultdir
+file mkdir $graphdir $resultdir
+
+set dodiff 0
+if {$argc && [string equal [lindex $argv 0] reference]} {
+  file delete -force $referencedir
+  file mkdir $referencedir
+  set resultdir $referencedir
+} {
+  if {[file exists $referencedir] && [file isdir $referencedir]} {
+    set dodiff 1
+  }
+}
+
+set state -1
+set testnum 0
+set subtestnum 0
+
+set pass 0
+set fail 0
+
+set fn TESTS
+set f [open $fn r]
+while {![eof $f]} {
+  set rec [gets $f]
+  if {[string length $rec] == 0} {
+    continue
+  }
+  if {[string first "#" $rec] == 0} {
+    continue
+  }
+  if {[string first "\t" $rec] != 0} {
+    set name $rec
+    set state 0
+    incr testnum
+    set subtestnum 0
+    continue
+  }
+  if {$state == -1} {
+    puts stderr "The first non-comment record in the TESTS file"
+    puts stderr "must be the name of a test without leading whitespace"
+    exit
+  }
+  set rec [string trim $rec]
+  if {$state == 0} {
+    set graph $rec
+    set state 1
+  } {
+    set command $rec
+    set layout dot
+    set format xdot
+    regexp {\-K([a-z0-9]+)} $rec . layout
+    regexp {\-T([a-z0-9]+)} $rec . format
+    incr subtestnum
+    set id [format %03d.%03d $testnum $subtestnum]
+    set src $graphdir/$id.dot
+    set ref $referencedir/$id.$format
+    set res $resultdir/$id.$format
+    set testf [open $graphdir/$id.dot w]
+    puts $testf "// $id: $name"
+    puts $testf "// $command"
+    puts $testf $graph
+    close $testf
+
+    # execute dot
+    switch $format {
+      ps - svg {
+       #FIXME - remove version string in output
+       set rc [catch {exec $DOT -K$layout -T$format $src -o $res}]
+      }
+      default {
+       set rc [catch {exec $DOT -K$layout -T$format $src -o $res}]
+      }
+    }
+    if {! $dodiff} {
+       continue
+    }
+    if {$rc} {
+       incr FAIL
+        puts "$id: \"$name\" CRASHED"
+       continue
+    }
+
+    # execute diff
+    switch $format {
+      png {
+       # can't use diff because PNG format includes a tIME record which changes
+       #   diffimg produces an image which highlights the differences
+        set rc [catch {exec $DIFFIMG $ref $res > $res.diff.png}]
+      }
+      default {
+        set rc [catch {exec $DIFF -u $ref $res > $res.diff}]
+      }
+    }
+    if {$rc} {
+      incr fail
+      puts "$id: \"$name\" FAILED"
+    } {
+      incr pass
+      foreach fn [glob $src $res $res.*] {
+        file delete $fn
+      }
+    }
+  }
+}
+close $f
+
+if {$dodiff} {
+  set total [expr {$pass+$fail}]
+  puts ""
+  puts "Summary: PASS $pass : FAIL $fail : TOTAL $total"
+}