예제 #1
0
    def test_flags_warning_scala(self):
        version = ('Scala code runner version 2.11.6 -- ' +
                   'Copyright 2002-2013, LAMP/EPFL')
        with mock.patch('bfg9000.shell.which', mock_which):  # noqa
            self.compiler = JvmBuilder(self.env, known_langs['scala'],
                                       ['scalac'], version).compiler

        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.warning('disable')
        )), ['-nowarn'])
        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.warning('all')
        )), ['-Xlint:_'])
        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.warning('error')
        )), ['-Xfatal-errors'])
        with self.assertRaises(ValueError):
            self.compiler.flags(opts.option_list(opts.warning('extra')))

        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.warning('all', 'error')
        )), ['-Xlint:_', '-Xfatal-errors'])

        with self.assertRaises(ValueError):
            self.compiler.flags(opts.option_list(opts.warning('unknown')))
예제 #2
0
    def setUp(self):
        def mock_execute(*args, **kwargs):
            return 'version'

        with mock.patch('bfg9000.shell.which', mock_which), \
             mock.patch('bfg9000.shell.execute', mock_execute):  # noqa
            self.linker = JvmBuilder(self.env, known_langs['java'], ['javac'],
                                     'version').linker('executable')
예제 #3
0
    def setUp(self):
        self.env = make_env()

        def mock_execute(*args, **kwargs):
            return 'version'

        with mock.patch('bfg9000.shell.which', mock_which), \
             mock.patch('bfg9000.shell.execute', mock_execute):  # noqa
            self.compiler = JvmBuilder(self.env, known_langs['java'],
                                       ['javac'], 'version').compiler
예제 #4
0
    def test_flags_debug(self):
        self.assertEqual(self.compiler.flags(opts.option_list(opts.debug())),
                         ['-g'])

        version = ('Scala code runner version 2.11.6 -- ' +
                   'Copyright 2002-2013, LAMP/EPFL')
        with mock.patch('bfg9000.shell.which', mock_which):
            scala_compiler = JvmBuilder(self.env, known_langs['scala'],
                                        ['scalac'], True, version).compiler
        self.assertEqual(scala_compiler.flags(opts.option_list(opts.debug())),
                         ['-g:vars'])
예제 #5
0
    def test_properties(self):
        with mock.patch('bfg9000.shell.which', mock_which), \
             mock.patch('bfg9000.shell.execute', default_mock_execute):
            jvm = JvmBuilder(self.env, known_langs['java'], ['javac'], True,
                             'version')

        self.assertEqual(jvm.flavor, 'jvm')
        self.assertEqual(jvm.compiler.flavor, 'jvm')
        self.assertEqual(jvm.linker('executable').flavor, 'jar')
        self.assertEqual(jvm.linker('shared_library').flavor, 'jar')

        self.assertEqual(jvm.family, 'jvm')
        self.assertEqual(jvm.can_dual_link, False)

        self.assertEqual(jvm.compiler.deps_flavor, None)
        self.assertEqual(jvm.compiler.needs_libs, True)

        self.assertEqual(jvm.compiler.needs_package_options, True)
        self.assertEqual(jvm.linker('executable').needs_package_options, False)
        self.assertEqual(
            jvm.linker('shared_library').needs_package_options, False)

        self.assertEqual(jvm.compiler.accepts_pch, False)

        self.assertRaises(AttributeError, lambda: jvm.pch_compiler)
        self.assertRaises(KeyError, lambda: jvm.linker('unknown'))
        self.assertRaises(ValueError, lambda: jvm.linker('static_library'))
예제 #6
0
class TestJvmLinker(unittest.TestCase):
    def setUp(self):
        self.env = make_env()

        def mock_execute(*args, **kwargs):
            return 'version'

        with mock.patch('bfg9000.shell.which', mock_which), \
             mock.patch('bfg9000.shell.execute', mock_execute):  # noqa
            self.linker = JvmBuilder(self.env, known_langs['java'], ['javac'],
                                     'version').linker('executable')

    def test_flags_empty(self):
        self.assertEqual(self.linker.flags(opts.option_list()), [])

    def test_flags_string(self):
        self.assertEqual(self.linker.flags(opts.option_list('-v')), ['-v'])

    def test_flags_invalid(self):
        with self.assertRaises(TypeError):
            self.linker.flags(opts.option_list(123))
예제 #7
0
    def test_flags_optimize(self):
        version = ('Scala code runner version 2.11.6 -- ' +
                   'Copyright 2002-2013, LAMP/EPFL')
        with mock.patch('bfg9000.shell.which', mock_which):  # noqa
            self.compiler = JvmBuilder(self.env, known_langs['scala'],
                                       ['scalac'], version).compiler

        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.optimize('disable')
        )), [])
        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.optimize('size')
        )), ['-optimize'])
        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.optimize('speed')
        )), ['-optimize'])
        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.optimize('linktime')
        )), [])

        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.optimize('speed', 'linktime')
        )), ['-optimize'])
예제 #8
0
class TestJvmLinker(CrossPlatformTestCase):
    def __init__(self, *args, **kwargs):
        super().__init__(clear_variables=True, *args, **kwargs)

    def setUp(self):
        def mock_execute(*args, **kwargs):
            return 'version'

        with mock.patch('bfg9000.shell.which', mock_which), \
             mock.patch('bfg9000.shell.execute', mock_execute):  # noqa
            self.linker = JvmBuilder(self.env, known_langs['java'], ['javac'],
                                     'version').linker('executable')

    def test_call(self):
        self.assertEqual(self.linker('in', 'out', 'manifest'),
                         [self.linker, 'out', 'manifest', 'in'])
        self.assertEqual(self.linker('in', 'out', 'manifest', ['flags']),
                         [self.linker, 'flags', 'out', 'manifest', 'in'])

    def test_output_file(self):
        self.assertEqual(self.linker.output_file('file', None),
                         file_types.Library(Path('file.jar'), 'jvm', 'java'))
        self.assertEqual(self.linker.output_file('file', AttrDict(
            entry_point='foo'
        )), file_types.ExecutableLibrary(Path('file.jar'), 'jvm', 'java'))

    def test_flags_empty(self):
        self.assertEqual(self.linker.flags(opts.option_list()), [])

    def test_flags_string(self):
        self.assertEqual(self.linker.flags(opts.option_list('-v')), ['-v'])

    def test_flags_debug(self):
        self.assertEqual(self.linker.flags(opts.option_list(
            opts.debug()
        )), [])

    def test_flags_optimize(self):
        self.assertEqual(self.linker.flags(opts.option_list(
            opts.optimize('size')
        )), [])

    def test_flags_invalid(self):
        with self.assertRaises(TypeError):
            self.linker.flags(opts.option_list(123))
예제 #9
0
    def test_scala(self):
        version = ('Scala code runner version 2.11.6 -- ' +
                   'Copyright 2002-2013, LAMP/EPFL')
        with mock.patch('bfg9000.shell.which', mock_which):  # noqa
            jvm = JvmBuilder(self.env, known_langs['scala'], ['scalac'],
                             version)

        self.assertEqual(jvm.brand, 'epfl')
        self.assertEqual(jvm.compiler.brand, 'epfl')
        self.assertEqual(jvm.linker('executable').brand, 'epfl')
        self.assertEqual(jvm.linker('shared_library').brand, 'epfl')

        self.assertEqual(jvm.version, Version('2.11.6'))
        self.assertEqual(jvm.compiler.version, Version('2.11.6'))
        self.assertEqual(jvm.linker('executable').version, Version('2.11.6'))
        self.assertEqual(jvm.linker('shared_library').version,
                         Version('2.11.6'))
예제 #10
0
    def test_broken_brand(self):
        def mock_execute(*args, **kwargs):
            raise OSError()

        with mock.patch('bfg9000.shell.which', mock_which), \
             mock.patch('bfg9000.shell.execute', mock_execute):  # noqa
            jvm = JvmBuilder(self.env, known_langs['java'], ['javac'],
                             'version')

        self.assertEqual(jvm.brand, 'unknown')
        self.assertEqual(jvm.compiler.brand, 'unknown')
        self.assertEqual(jvm.linker('executable').brand, 'unknown')
        self.assertEqual(jvm.linker('shared_library').brand, 'unknown')

        self.assertEqual(jvm.version, None)
        self.assertEqual(jvm.compiler.version, None)
        self.assertEqual(jvm.linker('executable').version, None)
        self.assertEqual(jvm.linker('shared_library').version, None)
예제 #11
0
    def test_oracle(self):
        def mock_execute(*args, **kwargs):
            return ('java version "1.7.0_55"\n' +
                    'Java(TM) SE Runtime Environment (build 1.7.0_55-b13)')

        version = 'javac 1.7.0_55'
        with mock.patch('bfg9000.shell.which', mock_which), \
             mock.patch('bfg9000.shell.execute', mock_execute):  # noqa
            jvm = JvmBuilder(self.env, known_langs['java'], ['javac'], version)

        self.assertEqual(jvm.brand, 'oracle')
        self.assertEqual(jvm.compiler.brand, 'oracle')
        self.assertEqual(jvm.linker('executable').brand, 'oracle')
        self.assertEqual(jvm.linker('shared_library').brand, 'oracle')

        self.assertEqual(jvm.version, Version('1.7.0'))
        self.assertEqual(jvm.compiler.version, Version('1.7.0'))
        self.assertEqual(jvm.linker('executable').version, Version('1.7.0'))
        self.assertEqual(jvm.linker('shared_library').version,
                         Version('1.7.0'))
예제 #12
0
    def test_openjdk(self):
        def mock_execute(*args, **kwargs):
            return ('openjdk version "1.8.0_151"\n' +
                    'OpenJDK Runtime Environment (build ' +
                    '1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12)')

        version = 'javac 1.8.0_151'
        with mock.patch('bfg9000.shell.which', mock_which), \
             mock.patch('bfg9000.shell.execute', mock_execute):  # noqa
            jvm = JvmBuilder(self.env, known_langs['java'], ['javac'], version)

        self.assertEqual(jvm.brand, 'openjdk')
        self.assertEqual(jvm.compiler.brand, 'openjdk')
        self.assertEqual(jvm.linker('executable').brand, 'openjdk')
        self.assertEqual(jvm.linker('shared_library').brand, 'openjdk')

        self.assertEqual(jvm.version, Version('1.8.0'))
        self.assertEqual(jvm.compiler.version, Version('1.8.0'))
        self.assertEqual(jvm.linker('executable').version, Version('1.8.0'))
        self.assertEqual(jvm.linker('shared_library').version,
                         Version('1.8.0'))
예제 #13
0
class TestJvmCompiler(unittest.TestCase):
    def setUp(self):
        self.env = make_env()

        def mock_execute(*args, **kwargs):
            return 'version'

        with mock.patch('bfg9000.shell.which', mock_which), \
             mock.patch('bfg9000.shell.execute', mock_execute):  # noqa
            self.compiler = JvmBuilder(self.env, known_langs['java'],
                                       ['javac'], 'version').compiler

    def test_flags_empty(self):
        self.assertEqual(self.compiler.flags(opts.option_list()), [])

    def test_flags_lib(self):
        lib1 = Path('/path/to/lib/libfoo.jar')
        lib2 = Path('/path/to/lib/libbar.jar')

        self.assertEqual(
            self.compiler.flags(
                opts.option_list(
                    opts.lib(file_types.StaticLibrary(lib1, 'jvm')))),
            ['-cp', jbos(lib1)])
        self.assertEqual(
            self.compiler.flags(
                opts.option_list(
                    opts.lib(file_types.StaticLibrary(lib1, 'jvm')),
                    opts.lib(file_types.StaticLibrary(lib2, 'jvm')))),
            ['-cp', lib1 + os.pathsep + lib2])

    def test_flags_string(self):
        self.assertEqual(self.compiler.flags(opts.option_list('-v')), ['-v'])

    def test_flags_invalid(self):
        with self.assertRaises(TypeError):
            self.compiler.flags(opts.option_list(123))
예제 #14
0
 def setUp(self):
     with mock.patch('bfg9000.shell.which', mock_which), \
          mock.patch('bfg9000.shell.execute', default_mock_execute):  # noqa
         self.linker = JvmBuilder(self.env, known_langs['java'], ['javac'],
                                  'version').linker('executable')
예제 #15
0
class TestJvmRunnerJava(CrossPlatformTestCase):
    lang = 'java'
    jar_args = ['-jar']

    def setUp(self):
        with mock.patch('bfg9000.shell.which', mock_which), \
             mock.patch('bfg9000.shell.execute', default_mock_execute):
            self.runner = JvmBuilder(self.env, known_langs[self.lang],
                                     ['javac'], True, 'version').runner

    def test_call(self):
        self.assertEqual(self.runner('file'), [self.runner, 'file'])

    def test_run_arguments_executable(self):
        exe = Executable(self.Path('file', Root.srcdir), 'jvm', lang=self.lang)
        self.assertEqual(self.runner.run_arguments(exe),
                         [self.runner] + self.jar_args + [exe])

        with mock.patch('bfg9000.shell.which', return_value=['command']), \
             mock.patch('bfg9000.shell.execute', default_mock_execute):
            args = self.env.run_arguments(exe)
        self.assertEqual(len(args), len(self.jar_args) + 2)
        self.assertEqual(type(args[0]), JvmRunner)
        self.assertEqual(args[1:], self.jar_args + [exe])

    def test_run_arguments_object_file(self):
        obj = ObjectFile(self.Path('file', Root.srcdir), 'jvm', lang=self.lang)
        self.assertEqual(
            self.runner.run_arguments(obj),
            [self.runner, '-cp',
             obj.path.parent(),
             obj.path.basename()])

        with mock.patch('bfg9000.shell.which', return_value=['command']), \
             mock.patch('bfg9000.shell.execute', default_mock_execute):
            args = self.env.run_arguments(obj)
        self.assertEqual(len(args), 4)
        self.assertEqual(type(args[0]), JvmRunner)
        self.assertEqual(args[1:],
                         ['-cp', obj.path.parent(),
                          obj.path.basename()])

    def test_run_arguments_object_file_list(self):
        objlist = ObjectFileList(self.Path('filelist'), self.Path('file'),
                                 'jvm', self.lang)
        self.assertEqual(
            self.runner.run_arguments(objlist),
            [self.runner, objlist.object_file.path.basename()])

        with mock.patch('bfg9000.shell.which', return_value=['command']), \
             mock.patch('bfg9000.shell.execute', default_mock_execute):
            args = self.env.run_arguments(objlist)
        self.assertEqual(len(args), 2)
        self.assertEqual(type(args[0]), JvmRunner)
        self.assertEqual(args[1], objlist.object_file.path.basename())

    def test_invalid_run_arguments(self):
        bad_file = SourceFile(self.Path('file', Root.srcdir), lang=self.lang)
        with self.assertRaises(TypeError):
            self.runner.run_arguments(bad_file)

        with mock.patch('bfg9000.shell.which', return_value=['command']), \
             mock.patch('bfg9000.shell.execute', default_mock_execute), \
             self.assertRaises(TypeError):
            self.env.run_arguments(bad_file)
예제 #16
0
 def setUp(self):
     with mock.patch('bfg9000.shell.which', mock_which), \
          mock.patch('bfg9000.shell.execute', default_mock_execute):
         self.runner = JvmBuilder(self.env, known_langs[self.lang],
                                  ['javac'], True, 'version').runner
예제 #17
0
class TestJvmCompiler(CrossPlatformTestCase):
    def __init__(self, *args, **kwargs):
        super().__init__(clear_variables=True, *args, **kwargs)

    def setUp(self):
        def mock_execute(*args, **kwargs):
            return 'version'

        with mock.patch('bfg9000.shell.which', mock_which), \
             mock.patch('bfg9000.shell.execute', mock_execute):  # noqa
            self.compiler = JvmBuilder(self.env, known_langs['java'],
                                       ['javac'], 'version').compiler

    def test_call(self):
        extra = self.compiler._always_flags
        with mock.patch('bfg9000.shell.which', mock_which):
            jvmout = self.env.tool('jvmoutput')
            self.assertEqual(
                self.compiler('in', 'out'),
                [jvmout, '-o', 'out', self.compiler] + extra + ['in']
            )
            self.assertEqual(
                self.compiler('in', 'out', ['flags']),
                [jvmout, '-o', 'out', self.compiler] + extra + ['flags', 'in']
            )

    def test_default_name(self):
        src = file_types.SourceFile(Path('file.java', Root.srcdir), 'java')
        self.assertEqual(self.compiler.default_name(src, None), 'file')

    def test_output_file(self):
        self.assertEqual(
            self.compiler.output_file('file', None),
            file_types.ObjectFileList(Path('file.classlist'),
                                      Path('file.class'), 'jvm', 'java')
        )

    def test_flags_empty(self):
        self.assertEqual(self.compiler.flags(opts.option_list()), [])

    def test_flags_lib(self):
        lib1 = self.Path('/path/to/lib/libfoo.jar')
        lib2 = self.Path('/path/to/lib/libbar.jar')

        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.lib(file_types.StaticLibrary(lib1, 'jvm'))
        )), ['-cp', lib1])
        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.lib(file_types.StaticLibrary(lib1, 'jvm')),
            opts.lib(file_types.StaticLibrary(lib2, 'jvm'))
        )), ['-cp', lib1 + os.pathsep + lib2])

    def test_flags_debug(self):
        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.debug()
        )), ['-g'])

        version = ('Scala code runner version 2.11.6 -- ' +
                   'Copyright 2002-2013, LAMP/EPFL')
        with mock.patch('bfg9000.shell.which', mock_which):  # noqa
            scala_compiler = JvmBuilder(self.env, known_langs['scala'],
                                        ['scalac'], version).compiler
        self.assertEqual(scala_compiler.flags(opts.option_list(
            opts.debug()
        )), ['-g:vars'])

    def test_flags_warning(self):
        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.warning('disable')
        )), ['-nowarn'])
        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.warning('all')
        )), ['-Xlint:all'])
        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.warning('error')
        )), ['-Werror'])
        with self.assertRaises(ValueError):
            self.compiler.flags(opts.option_list(opts.warning('extra')))

        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.warning('all', 'error')
        )), ['-Xlint:all', '-Werror'])

    def test_flags_warning_scala(self):
        version = ('Scala code runner version 2.11.6 -- ' +
                   'Copyright 2002-2013, LAMP/EPFL')
        with mock.patch('bfg9000.shell.which', mock_which):  # noqa
            self.compiler = JvmBuilder(self.env, known_langs['scala'],
                                       ['scalac'], version).compiler

        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.warning('disable')
        )), ['-nowarn'])
        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.warning('all')
        )), ['-Xlint:_'])
        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.warning('error')
        )), ['-Xfatal-errors'])
        with self.assertRaises(ValueError):
            self.compiler.flags(opts.option_list(opts.warning('extra')))

        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.warning('all', 'error')
        )), ['-Xlint:_', '-Xfatal-errors'])

        with self.assertRaises(ValueError):
            self.compiler.flags(opts.option_list(opts.warning('unknown')))

    def test_flags_optimize(self):
        version = ('Scala code runner version 2.11.6 -- ' +
                   'Copyright 2002-2013, LAMP/EPFL')
        with mock.patch('bfg9000.shell.which', mock_which):  # noqa
            self.compiler = JvmBuilder(self.env, known_langs['scala'],
                                       ['scalac'], version).compiler

        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.optimize('disable')
        )), [])
        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.optimize('size')
        )), ['-optimize'])
        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.optimize('speed')
        )), ['-optimize'])
        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.optimize('linktime')
        )), [])

        self.assertEqual(self.compiler.flags(opts.option_list(
            opts.optimize('speed', 'linktime')
        )), ['-optimize'])

    def test_flags_string(self):
        self.assertEqual(self.compiler.flags(opts.option_list('-v')), ['-v'])

    def test_flags_invalid(self):
        with self.assertRaises(TypeError):
            self.compiler.flags(opts.option_list(123))