First crack at support to run tests using dejagnu. This file contains a procedure...
authorTanya Lattner <tonic@nondot.org>
Sat, 6 Nov 2004 21:07:41 +0000 (21:07 +0000)
committerTanya Lattner <tonic@nondot.org>
Sat, 6 Nov 2004 21:07:41 +0000 (21:07 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17521 91177308-0d34-0410-b5e6-96231b3b80d8

test/lib/llvm-dg.exp [new file with mode: 0644]

diff --git a/test/lib/llvm-dg.exp b/test/lib/llvm-dg.exp
new file mode 100644 (file)
index 0000000..a904770
--- /dev/null
@@ -0,0 +1,103 @@
+proc llvm-runtest { programs srcdir subdir target_triplet} {
+
+    set path [file join $srcdir $subdir]
+    
+    #Make Output Directory if it does not exist already
+    cd $path
+    
+    file mkdir Output
+    foreach test $programs {
+       
+       set timeout 40
+       set filename [file tail $test]
+       set output [file join Output $filename.out]
+       set script $output.script
+       set outcome PASS
+       set tmpFile testscript.
+       append tmpFile $filename .tmp
+
+       #set hasRunline bool to check if testcase has a runline
+       set hasRunline 0
+
+       #check if script files exists, and delete if it does
+       if { [file exists $script] } {
+           file delete $script
+       }
+       
+       #create script file and write run line out to it
+       set scriptFileId [open $script w 0700]
+       set testFileId [ open $test r]
+       foreach line [split [read $testFileId] \n] {
+           
+           #see if this is our run line
+           if {[regexp {RUN:(.+)} $line match runline]} {
+               set runline
+               set hasRunline 1
+
+               #replace %s with filename
+               regsub -all {%s} $runline $filename new_runline
+               
+               regsub -all {%t} $new_runline [file join Output $tmpFile] new_runline
+       
+               puts $scriptFileId $new_runline
+           } elseif {[regexp {XFAIL:[ *](.+)} $line match targets]} {
+               set targets
+               
+
+               #split up target if more then 1 specified
+               foreach target [split $targets ,] {
+                   if { [regexp {\*} $target match] } {
+                       set outcome XFAIL
+                   } elseif { [regexp $target $target_triplet match] } {
+                       set outcome XFAIL
+                   }
+                   
+               }
+           }
+           
+       }
+       
+       close $testFileId
+       close $scriptFileId
+       
+       
+       if { $hasRunline == 0 } {
+           fail "$test: \nDoes not have a RUN line\n"
+       } else {
+
+           #run script and catch errors
+           set retval [ catch {exec /bin/sh $script >& $output} ]
+           
+           if { $retval == 1 } {
+               #Get output
+               set outputFile [open $output {RDONLY}]
+               set result [read $outputFile]
+               close $outputFile
+               file delete $outputFile
+               
+               switch $outcome {
+                   PASS {
+                       file delete $output
+                       fail "$test: \n$result"
+                   }
+                   XFAIL {
+                       xfail "$test: \n$result"
+                   }
+                   default {
+                       file delete $output
+                       fail "$test: $result"
+                   }
+               }
+           } else {
+               switch $outcome {
+                   XFAIL {
+                       xpass "$test"
+                   }
+                   default {
+                       pass "$test"}
+               }
+           }
+       }
+    }
+}
\ No newline at end of file