diff options
Diffstat (limited to 'src/engine/SCons/Tool/JavaCommonTests.py')
| -rw-r--r-- | src/engine/SCons/Tool/JavaCommonTests.py | 128 | 
1 files changed, 118 insertions, 10 deletions
diff --git a/src/engine/SCons/Tool/JavaCommonTests.py b/src/engine/SCons/Tool/JavaCommonTests.py index da405f0..45a8a0b 100644 --- a/src/engine/SCons/Tool/JavaCommonTests.py +++ b/src/engine/SCons/Tool/JavaCommonTests.py @@ -1,5 +1,5 @@  # -# Copyright (c) 2001 - 2017 The SCons Foundation +# Copyright (c) 2001 - 2019 The SCons Foundation  #  # Permission is hereby granted, free of charge, to any person obtaining  # a copy of this software and associated documentation files (the @@ -21,17 +21,17 @@  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  # -__revision__ = "src/engine/SCons/Tool/JavaCommonTests.py rel_3.0.0:4395:8972f6a2f699 2017/09/18 12:59:24 bdbaddog" +__revision__ = "src/engine/SCons/Tool/JavaCommonTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"  import os.path  import sys  import unittest - -import TestUnit +import fnmatch  import SCons.Scanner.IDL  import SCons.Tool.JavaCommon +import TestSCons  # Adding trace=trace to any of the parse_jave() calls below will cause  # the parser to spit out trace messages of the tokens it sees and the @@ -566,14 +566,122 @@ public class Foo          assert expect == classes, (expect, classes) +    def test_in_function_class_declaration(self): +        """ +        Test that implementing a class in a function call doesn't confuse SCons. +        """ + +        input = """ +package com.Matthew; + +public class AnonDemo { + +    public static void main(String[] args) { +        new AnonDemo().execute(); +    } + +    public void execute() { +        Foo bar = new Foo(new Foo() { +            @Override +            public int getX() { return this.x; } +        }) { +            @Override +            public int getX() { return this.x; } +        }; +    } + +    public abstract class Foo { +        public int x; +        public abstract int getX(); + +        public Foo(Foo f) { +            this.x = f.x; +        } + +        public Foo() {} +    } +} +""" +        expect = ['AnonDemo$1', +                  'AnonDemo$2', +                  'AnonDemo$Foo', +                  'AnonDemo'] +        pkg_dir, classes = SCons.Tool.JavaCommon.parse_java(input, '1.8') +        assert expect == classes, (expect, classes) + +    def test_jdk_globs(self): +        """ +        Verify that the java path globs work with specific examples. +        :return: +        """ +        from SCons.Tool.JavaCommon import java_linux_include_dirs_glob, java_linux_version_include_dirs_glob, java_win32_dir_glob, java_win32_version_dir_glob, java_macos_include_dir_glob, java_macos_version_include_dir_glob + +        # Test windows globs +        win_java_dirs = [ +            ('C:/Program Files/Java/jdk1.8.0_201/bin', '1.8.0'), +            ('C:/Program Files/Java/jdk-11.0.2/bin', '11.0.2'), +            ('C:/Program Files/Java/jdk1.7.0_80/bin', '1.7.0') +        ] + +        for (wjd, version) in win_java_dirs: +            if not fnmatch.fnmatch(wjd, java_win32_dir_glob): +                self.fail("Didn't properly match %s with pattern %s" % (wjd, java_win32_dir_glob)) +            if not fnmatch.fnmatch(wjd, java_win32_version_dir_glob % version): +                self.fail("Didn't properly match %s with version (%s) specific pattern %s" % ( +                wjd, version, java_win32_version_dir_glob % version)) + +        non_win_java_include_dirs = [ +            ('/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64/include', '1.8.0'), +            ('/usr/lib/jvm/java-1.8.0-openjdk-amd64/include', '1.8.0'), +            ('/usr/lib/jvm/java-8-openjdk-amd64/include', '8'), +        ] + +        # Test non-windows/non-macos globs +        for (wjd, version) in non_win_java_include_dirs: +            match = False +            globs_tried =[] +            for jlig in java_linux_include_dirs_glob: +                globs_tried.append(jlig) + +                if fnmatch.fnmatch(wjd, jlig): +                    match = True +                    break + +            if not match: +                self.fail("Didn't properly match %s with pattern %s" % (wjd, globs_tried)) + +            match = False +            globs_tried = [] +            for jlvig in java_linux_version_include_dirs_glob: +                globs_tried.append(jlvig%version) +                if fnmatch.fnmatch(wjd, jlvig % version): +                    match = True +                    break + +            if not match: +                self.fail("Didn't properly match %s with version (%s) specific pattern %s" % ( +                    wjd, version, globs_tried)) + +        # Test macos globs +        # Test windows globs +        macos_java_dirs = [ +            # ('/System/Library/Frameworks/JavaVM.framework/Headers/', None), +            ('/System/Library/Frameworks/JavaVM.framework/Versions/11.0.2/Headers/', '11.0.2'), +        ] + +        if not fnmatch.fnmatch('/System/Library/Frameworks/JavaVM.framework/Headers/', java_macos_include_dir_glob): +            self.fail("Didn't properly match %s with pattern %s" % ('/System/Library/Frameworks/JavaVM.framework/Headers/', java_macos_include_dir_glob)) + +        for (wjd, version) in macos_java_dirs: +            if not fnmatch.fnmatch(wjd, java_macos_version_include_dir_glob % version): +                self.fail("Didn't properly match %s with version (%s) specific pattern %s" % ( +                wjd, version, java_macos_version_include_dir_glob % version)) + + +  if __name__ == "__main__": -    suite = unittest.TestSuite() -    tclasses = [ parse_javaTestCase ] -    for tclass in tclasses: -        names = unittest.getTestCaseNames(tclass, 'test_') -        suite.addTests(list(map(tclass, names))) -    TestUnit.run(suite) +    unittest.main()  # Local Variables:  # tab-width:4  | 
