Move run-bindings-tests implementation to webkitpy/bindings/main.py
authorharaken@chromium.org <haraken@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 2 Dec 2011 09:31:03 +0000 (09:31 +0000)
committerharaken@chromium.org <haraken@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 2 Dec 2011 09:31:03 +0000 (09:31 +0000)
https://bugs.webkit.org/show_bug.cgi?id=73619

Reviewed by Adam Barth.

As run-bindings-tests has been growing, this patch just moves its implementation
to webkitpy/bindings/main.py to integrate with the rest of webkitpy.

No change in behavior.

* Scripts/run-bindings-tests:
(main):
* Scripts/webkitpy/bindings/__init__.py: Added.
* Scripts/webkitpy/bindings/main.py: Added.
(BindingsTests.__init__):
(BindingsTests.generate_from_idl):
(BindingsTests.generate_supplemental_dependency):
(BindingsTests.detect_changes):
(BindingsTests.run_tests):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101767 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/Scripts/run-bindings-tests
Tools/Scripts/webkitpy/bindings/__init__.py [new file with mode: 0644]
Tools/Scripts/webkitpy/bindings/main.py [new file with mode: 0644]

index 219b80e..592dcf5 100644 (file)
@@ -1,3 +1,25 @@
+2011-12-02  Kentaro Hara  <haraken@chromium.org>
+
+        Move run-bindings-tests implementation to webkitpy/bindings/main.py
+        https://bugs.webkit.org/show_bug.cgi?id=73619
+
+        Reviewed by Adam Barth.
+
+        As run-bindings-tests has been growing, this patch just moves its implementation
+        to webkitpy/bindings/main.py to integrate with the rest of webkitpy.
+
+        No change in behavior.
+
+        * Scripts/run-bindings-tests:
+        (main):
+        * Scripts/webkitpy/bindings/__init__.py: Added.
+        * Scripts/webkitpy/bindings/main.py: Added.
+        (BindingsTests.__init__):
+        (BindingsTests.generate_from_idl):
+        (BindingsTests.generate_supplemental_dependency):
+        (BindingsTests.detect_changes):
+        (BindingsTests.run_tests):
+
 2011-12-01  Ilya Tikhonovsky  <loislo@chromium.org>
 
         Tools/Scripts: eliminate find_test_files from Port class.
 2011-12-01  Ilya Tikhonovsky  <loislo@chromium.org>
 
         Tools/Scripts: eliminate find_test_files from Port class.
index 1747eb5..236d50e 100755 (executable)
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 
-# This script generates h and cpp file for TestObj.idl using the V8 code
-# generator. Please execute the script whenever changes are made to
-# CodeGeneratorV8.pm, and submit the changes in V8TestObj.h/cpp in the same
+# This script generates h and cpp file for TestObj.idl using code
+# generators. Please execute the script whenever changes are made to
+# CodeGeneratorXXXX.pm, and submit the changes in XXXXTestObj.h/cpp in the same
 # patch. This makes it easier to track and review changes in generated code.
 # patch. This makes it easier to track and review changes in generated code.
-# To execute, invoke: 'python run_tests.py'
 
 
-import os
-import os.path
-import shutil
-import subprocess
 import sys
 import sys
-import tempfile
-from webkitpy.common.checkout.scm.detection import detect_scm_system
-
-
-def generate_from_idl(generator, idl_file, output_directory, supplemental_dependency_file):
-    cmd = ['perl', '-w',
-           '-IWebCore/bindings/scripts',
-           'WebCore/bindings/scripts/generate-bindings.pl',
-           # idl include directories (path relative to generate-bindings.pl)
-           '--include', '.',
-           '--defines', 'TESTING_%s' % generator,
-           '--generator', generator,
-           '--outputDir', output_directory,
-           '--supplementalDependencyFile', supplemental_dependency_file,
-           idl_file]
-
-    process = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
-    exit_code = process.wait()
-    output = process.communicate()[0]
-    if output:
-        print output
-    return exit_code
-
-
-def generate_supplemental_dependency(input_directory, supplemental_dependency_file):
-    idl_files_list = tempfile.mkstemp()
-    for input_file in os.listdir(input_directory):
-        (name, extension) = os.path.splitext(input_file)
-        if extension != '.idl':
-            continue
-        os.write(idl_files_list[0], os.path.join(input_directory, input_file) + "\n")
-    os.close(idl_files_list[0])
-
-    cmd = ['perl', '-w',
-           '-IWebCore/bindings/scripts',
-           'WebCore/bindings/scripts/resolve-supplemental.pl',
-           '--idlFilesList', idl_files_list[1],
-           '--defines', '',
-           '--supplementalDependencyFile', supplemental_dependency_file]
-    process = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
-    exit_code = process.wait()
-    output = process.communicate()[0]
-    if output:
-        print output
-
-    os.remove(idl_files_list[1])
-    return exit_code
-
-
-def detect_changes(generator, work_directory, reference_directory):
-    changes_found = False
-    for output_file in os.listdir(work_directory):
-        cmd = ['diff',
-               '-u',
-               '-N',
-               os.path.join(reference_directory, output_file),
-               os.path.join(work_directory, output_file)]
-
-        process = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
-        process.wait()
-        output = process.communicate()[0]
-        if output:
-            print 'FAIL: (%s) %s' % (generator, output_file)
-            print output
-            changes_found = True
-        else:
-            print 'PASS: (%s) %s' % (generator, output_file)
-
-    return changes_found
-
-
-def run_tests(generator, input_directory, reference_directory, reset_results, supplemental_dependency_file):
-    work_directory = reference_directory
-
-    passed = True
-    for input_file in os.listdir(input_directory):
-        (name, extension) = os.path.splitext(input_file)
-        if extension != '.idl':
-            continue
-        # Generate output into the work directory (either the given one or a
-        # temp one if not reset_results is performed)
-        if not reset_results:
-            work_directory = tempfile.mkdtemp()
-
-        if generate_from_idl(generator,
-                             os.path.join(input_directory, input_file),
-                             work_directory,
-                             supplemental_dependency_file):
-            passed = False
-
-        if reset_results:
-            print "Reset results: (%s) %s" % (generator, input_file)
-            continue
-
-        # Detect changes
-        if detect_changes(generator, work_directory, reference_directory):
-            passed = False
-        shutil.rmtree(work_directory)
-
-    return passed
-
 
 def main(argv):
     """Runs WebCore bindings code generators on test IDL files and compares
 
 def main(argv):
     """Runs WebCore bindings code generators on test IDL files and compares
@@ -146,11 +40,6 @@ def main(argv):
     """
     reset_results = "--reset-results" in argv
 
     """
     reset_results = "--reset-results" in argv
 
-    current_scm = detect_scm_system(os.curdir)
-    os.chdir(os.path.join(current_scm.checkout_root, 'Source'))
-
-    all_tests_passed = True
-
     generators = [
         'JS',
         'V8',
     generators = [
         'JS',
         'V8',
@@ -159,27 +48,9 @@ def main(argv):
         'CPP'
     ]
 
         'CPP'
     ]
 
-    input_directory = os.path.join('WebCore', 'bindings', 'scripts', 'test')
-    supplemental_dependency_file = tempfile.mkstemp()[1]
-    if generate_supplemental_dependency(input_directory, supplemental_dependency_file):
-        print 'Failed to generate a supplemental dependency file.'
-        os.remove(supplemental_dependency_file)
-        return -1
-
-    for generator in generators:
-        input_directory = os.path.join('WebCore', 'bindings', 'scripts', 'test')
-        reference_directory = os.path.join('WebCore', 'bindings', 'scripts', 'test', generator)
-        if not run_tests(generator, input_directory, reference_directory, reset_results, supplemental_dependency_file):
-            all_tests_passed = False
+    from webkitpy.bindings.main import BindingsTests
 
 
-    os.remove(supplemental_dependency_file)
-    print ''
-    if all_tests_passed:
-        print 'All tests PASS!'
-        return 0
-    else:
-        print 'Some tests FAIL! (To update the reference files, execute "run-bindings-tests --reset-results")'
-        return -1
+    BindingsTests(reset_results, generators).main()
 
 
 if __name__ == '__main__':
 
 
 if __name__ == '__main__':
diff --git a/Tools/Scripts/webkitpy/bindings/__init__.py b/Tools/Scripts/webkitpy/bindings/__init__.py
new file mode 100644 (file)
index 0000000..ef65bee
--- /dev/null
@@ -0,0 +1 @@
+# Required for Python to search this directory for module files
diff --git a/Tools/Scripts/webkitpy/bindings/main.py b/Tools/Scripts/webkitpy/bindings/main.py
new file mode 100644 (file)
index 0000000..de8e6da
--- /dev/null
@@ -0,0 +1,161 @@
+#!/usr/bin/python
+# Copyright (C) 2011 Google Inc.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+import os
+import os.path
+import shutil
+import subprocess
+import sys
+import tempfile
+from webkitpy.common.checkout.scm.detection import detect_scm_system
+
+
+class BindingsTests:
+
+    def __init__(self, reset_results, generators):
+        self.reset_results = reset_results
+        self.generators = generators
+
+    def generate_from_idl(self, generator, idl_file, output_directory, supplemental_dependency_file):
+        cmd = ['perl', '-w',
+               '-IWebCore/bindings/scripts',
+               'WebCore/bindings/scripts/generate-bindings.pl',
+               # idl include directories (path relative to generate-bindings.pl)
+               '--include', '.',
+               '--defines', 'TESTING_%s' % generator,
+               '--generator', generator,
+               '--outputDir', output_directory,
+               '--supplementalDependencyFile', supplemental_dependency_file,
+               idl_file]
+
+        process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+        exit_code = process.wait()
+        output = process.communicate()[0]
+        if output:
+            print output
+        return exit_code
+
+    def generate_supplemental_dependency(self, input_directory, supplemental_dependency_file):
+        idl_files_list = tempfile.mkstemp()
+        for input_file in os.listdir(input_directory):
+            (name, extension) = os.path.splitext(input_file)
+            if extension != '.idl':
+                continue
+            os.write(idl_files_list[0], os.path.join(input_directory, input_file) + "\n")
+        os.close(idl_files_list[0])
+
+        cmd = ['perl', '-w',
+               '-IWebCore/bindings/scripts',
+               'WebCore/bindings/scripts/resolve-supplemental.pl',
+               '--idlFilesList', idl_files_list[1],
+               '--defines', '',
+               '--supplementalDependencyFile', supplemental_dependency_file]
+        process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+        exit_code = process.wait()
+        output = process.communicate()[0]
+        if output:
+            print output
+
+        os.remove(idl_files_list[1])
+        return exit_code
+
+    def detect_changes(self, generator, work_directory, reference_directory):
+        changes_found = False
+        for output_file in os.listdir(work_directory):
+            cmd = ['diff',
+                   '-u',
+                   '-N',
+                   os.path.join(reference_directory, output_file),
+                   os.path.join(work_directory, output_file)]
+
+            process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+            process.wait()
+            output = process.communicate()[0]
+            if output:
+                print 'FAIL: (%s) %s' % (generator, output_file)
+                print output
+                changes_found = True
+            else:
+                print 'PASS: (%s) %s' % (generator, output_file)
+
+        return changes_found
+
+    def run_tests(self, generator, input_directory, reference_directory, supplemental_dependency_file):
+        work_directory = reference_directory
+
+        passed = True
+        for input_file in os.listdir(input_directory):
+            (name, extension) = os.path.splitext(input_file)
+            if extension != '.idl':
+                continue
+            # Generate output into the work directory (either the given one or a
+            # temp one if not reset_results is performed)
+            if not self.reset_results:
+                work_directory = tempfile.mkdtemp()
+
+            if self.generate_from_idl(generator,
+                                      os.path.join(input_directory, input_file),
+                                      work_directory,
+                                      supplemental_dependency_file):
+                passed = False
+
+            if self.reset_results:
+                print "Reset results: (%s) %s" % (generator, input_file)
+                continue
+
+            # Detect changes
+            if self.detect_changes(generator, work_directory, reference_directory):
+                passed = False
+            shutil.rmtree(work_directory)
+
+        return passed
+
+    def main(self):
+        current_scm = detect_scm_system(os.curdir)
+        os.chdir(os.path.join(current_scm.checkout_root, 'Source'))
+
+        all_tests_passed = True
+
+        input_directory = os.path.join('WebCore', 'bindings', 'scripts', 'test')
+        supplemental_dependency_file = tempfile.mkstemp()[1]
+        if self.generate_supplemental_dependency(input_directory, supplemental_dependency_file):
+            print 'Failed to generate a supplemental dependency file.'
+            os.remove(supplemental_dependency_file)
+            return -1
+
+        for generator in self.generators:
+            input_directory = os.path.join('WebCore', 'bindings', 'scripts', 'test')
+            reference_directory = os.path.join('WebCore', 'bindings', 'scripts', 'test', generator)
+            if not self.run_tests(generator, input_directory, reference_directory, supplemental_dependency_file):
+                all_tests_passed = False
+
+        os.remove(supplemental_dependency_file)
+        print ''
+        if all_tests_passed:
+            print 'All tests PASS!'
+            return 0
+        else:
+            print 'Some tests FAIL! (To update the reference files, execute "run-bindings-tests --reset-results")'
+            return -1