better support for undocumented type 0x1d
[swftools.git] / lib / as3 / runtests.py
index 213638d..b46206d 100644 (file)
@@ -25,6 +25,7 @@ import os
 import time
 import subprocess
 import marshal
+import select
 from optparse import OptionParser
 
 def check(s):
@@ -58,22 +59,30 @@ def check(s):
     return 0
 
 def runcmd(cmd,args,wait):
-    #fo = open(tempfile, "wb")
-    fo= os.tmpfile()
+    #fo = os.tmpfile()
+    fi,fo = os.pipe()
+    fo = os.fdopen(fo, "wb")
     p = subprocess.Popen([cmd] + args, executable=cmd, stdout=fo, stderr=fo)
     ret = -1
+    output = ""
     for i in range(wait*10):
+        if fi in select.select([fi],[],[], 0.01)[0]:
+            output += os.read(fi, 8192)
+            if "[exit]" in output:
+                break
         ret = p.poll()
         if ret is not None:
             break
         time.sleep(0.1)
     else:
         os.kill(p.pid, 9)
-        os.system("killall -9 "+cmd)
-  
-    fo.seek(0)
-    output = fo.read()
+        os.system("killall -9 %s >/dev/null 2>/dev/null" % cmd)
     fo.close()
+   
+    if fi in select.select([fi],[],[], 0.01)[0]:
+        output += os.read(fi, 8192)
+
+    os.close(fi)
     return ret,output
 
 class Cache:
@@ -131,8 +140,10 @@ class TestBase:
         ret,output = runcmd("./parser",[self.file],wait=60)
         self.compile_error = 0
         self.compile_output = output
+        self.exit_status = 0
         if ret:
             self.compile_output += "\nExit status %d" % (-ret)
+            self.exit_status = -ret
             self.compile_error = 1
             return 0
         if not os.path.isfile("abc.swf"):
@@ -154,11 +165,14 @@ class TestBase:
         print self.r(str(self.nr),3)," ",
         if self.compile_error:
             if self.dorun:
-                print "err"," - ",
+                if self.exit_status == 11:
+                    print "crash"," - ",
+                else:
+                    print "err  "," - ",
             else:
-                print "err","   ",
+                print "err  ","   ",
         else:
-            print "ok ",
+            print "ok   ",
             if self.dorun:
                 if not self.flash_error:
                     print "ok ",