예제 #1
0
class TestJvmLinker(CrossPlatformTestCase):
    def __init__(self, *args, **kwargs):
        super().__init__(clear_variables=True, *args, **kwargs)

    def setUp(self):
        with mock.patch('bfg9000.shell.which', mock_which), \
             mock.patch('bfg9000.shell.execute', default_mock_execute):
            self.linker = JvmBuilder(self.env, known_langs['java'], ['javac'],
                                     True, '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(options=opts.option_list(opts.entry_point('foo')))),
            file_types.ExecutableLibrary(Path('file.jar'), 'jvm', 'java'))

    def test_can_link(self):
        self.assertTrue(self.linker.can_link('jvm', ['java', 'scala']))
        self.assertTrue(self.linker.can_link('jvm', ['goofy']))
        self.assertFalse(self.linker.can_link('goofy', ['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_entry_point(self):
        self.assertEqual(
            self.linker.flags(opts.option_list(opts.entry_point('symbol'))),
            [])

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

    def test_flags_invalid(self):
        with self.assertRaises(TypeError):
            self.linker.flags(opts.option_list(123))
예제 #2
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'])
예제 #3
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))
예제 #4
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))
예제 #5
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))