def test_read_nonexistent_file(self): grammar = AntlrGrammar(pathlib.Path('FooBar.g4')) # check if DistutilsFileError was thrown with pytest.raises(distutils.errors.DistutilsFileError) as excinfo: grammar.read_imports() assert excinfo.match('FooBar.g4')
def test_run_grammars_multiple(self, mock_run, configured_command): mock_run.return_value = unittest.mock.Mock(returncode=0) configured_command._find_grammars = unittest.mock.Mock(return_value=[ AntlrGrammar(pathlib.Path('Foo.g4')), AntlrGrammar(pathlib.Path('Bar.g4')) ]) configured_command.grammars = ['Foo'] configured_command.run() args, _ = mock_run.call_args assert mock_run.call_count == 1 assert 'Foo.g4' in args[0]
def test_run_package_exists(self, mock_find_grammars, mock_run, mock_find_antlr, mock_find_java, tmpdir, command): java_exe = pathlib.Path('c:/path/to/java/bin/java.exe') antlr_jar = pathlib.Path('antlr-4.5.3-complete.jar') mock_find_java.return_value = java_exe mock_find_antlr.return_value = antlr_jar grammar = AntlrGrammar(pathlib.Path('SomeGrammar.g4')) mock_find_grammars.return_value = [grammar] mock_run.return_value = unittest.mock.Mock(returncode=0) gen_dir = str(tmpdir.mkdir('gen')) package_dir = pathlib.Path(gen_dir, 'some_grammar') package_dir.mkdir() init_file = pathlib.Path(package_dir, '__init__.py') init_file.open('wt').close() origin_mtime_ns = init_file.stat().st_mtime_ns command.output['default'] = gen_dir command.run() assert init_file.stat().st_mtime_ns == origin_mtime_ns
def test_find_grammars_distributed(self, command): grammars = command._find_grammars(pathlib.Path('distributed')) common_terminals = AntlrGrammar( pathlib.Path('distributed/CommonTerminals.g4')) shared_rules = AntlrGrammar(pathlib.Path('distributed/SharedRules.g4')) some_grammar = AntlrGrammar(pathlib.Path('distributed/SomeGrammar.g4')) shared_rules.dependencies.append(common_terminals) some_grammar.dependencies.append(common_terminals) some_grammar.dependencies.append(shared_rules) assert len(grammars) == 3 assert common_terminals in grammars assert shared_rules in grammars assert some_grammar in grammars
def test_find_grammars_standalone(self, command): grammars = command._find_grammars(pathlib.Path('standalone')) some_grammar = AntlrGrammar(pathlib.Path('standalone/SomeGrammar.g4')) assert len(grammars) == 1 assert some_grammar in grammars
def test_run_grammars_not_found(self, mock_run, configured_command): mock_run.return_value = unittest.mock.Mock(returncode=0) configured_command._find_grammars = unittest.mock.Mock( return_value=[AntlrGrammar(pathlib.Path('Foo.g4'))]) configured_command.grammars = ['Bar'] configured_command.run() assert mock_run.call_count == 0
def test_run_multiple_library_location(self, mock_find_grammars, mock_run, mock_find_antlr, mock_find_java, tmpdir, command): java_exe = pathlib.Path('c:/path/to/java/bin/java.exe') antlr_jar = pathlib.Path('antlr-4.5.3-complete.jar') mock_find_java.return_value = java_exe mock_find_antlr.return_value = antlr_jar grammar = AntlrGrammar(pathlib.Path('SomeGrammar.g4')) grammar.dependencies = [ AntlrGrammar(pathlib.Path('terminals/common.g4')), AntlrGrammar(pathlib.Path('rules/common.g4')) ] mock_find_grammars.return_value = [grammar] mock_run.return_value = unittest.mock.Mock(returncode=0) command.output['default'] = str(tmpdir.mkdir('gen')) with pytest.raises(distutils.errors.DistutilsOptionError) as excinfo: command.run() assert excinfo.match('Imported grammars of \'SomeGrammar\' are located in more than one ' 'directory.')
def test_run_one_library_location(self, mock_find_grammars, mock_run, mock_find_antlr, mock_find_java, tmpdir, command): java_exe = pathlib.Path('c:/path/to/java/bin/java.exe') antlr_jar = pathlib.Path('antlr-4.5.3-complete.jar') mock_find_java.return_value = java_exe mock_find_antlr.return_value = antlr_jar grammar = AntlrGrammar(pathlib.Path('SomeGrammar.g4')) grammar.dependencies = [ AntlrGrammar(pathlib.Path('shared/CommonTerminals.g4')) ] mock_find_grammars.return_value = [grammar] mock_run.return_value = unittest.mock.Mock(returncode=0) command.output['default'] = str(tmpdir.mkdir('gen')) command.run() args, _ = mock_run.call_args assert mock_run.called assert '-lib' in args[0] assert any(a.endswith('shared') for a in args[0])
def test_run_multiple_library_location(self, mock_find_grammars, mock_run, mock_find_antlr, mock_find_java, tmpdir, command): java_exe = pathlib.Path('c:/path/to/java/bin/java.exe') antlr_jar = pathlib.Path('antlr-4.5.3-complete.jar') mock_find_java.return_value = java_exe mock_find_antlr.return_value = antlr_jar grammar = AntlrGrammar(pathlib.Path('SomeGrammar.g4')) grammar.dependencies = [ AntlrGrammar(pathlib.Path('terminals/common.g4')), AntlrGrammar(pathlib.Path('rules/common.g4')) ] mock_find_grammars.return_value = [grammar] mock_run.return_value = unittest.mock.Mock(returncode=0) command.output['default'] = str(tmpdir.mkdir('gen')) with pytest.raises(distutils.errors.DistutilsOptionError) as excinfo: command.run() assert excinfo.match( 'Imported grammars of \'SomeGrammar\' are located in more than one directory.' )
def configured_command(self, monkeypatch, tmpdir, command): command._find_antlr = unittest.mock.Mock( return_value=pathlib.Path('antlr-4.5.3-complete.jar')) command._find_grammars = unittest.mock.Mock(return_value=[ AntlrGrammar(pathlib.Path('standalone/SomeGrammar.g4')) ]) command.output['default'] = str(tmpdir.mkdir('gen')) monkeypatch.setattr( setuptools_antlr.command, 'find_java', unittest.mock.Mock( return_value=pathlib.Path('c:/path/to/java/bin/java.exe'))) return command
def test_run_custom_output_dir(self, mock_run, configured_command): mock_run.return_value = unittest.mock.Mock(returncode=0) configured_command._find_grammars = unittest.mock.Mock(return_value=[ AntlrGrammar(pathlib.Path('Foo.g4')), ]) custom_output_dir = 'build/lib/custom' configured_command.output['Foo'] = custom_output_dir configured_command.run() args, _ = mock_run.call_args assert mock_run.call_count == 1 custom_package_path = pathlib.Path(custom_output_dir, 'foo').absolute() assert any(custom_package_path == pathlib.Path(a) for a in args[0])
def test_run_java_found(self, mock_find_grammars, mock_run, mock_find_java, tmpdir, command): java_exe = pathlib.Path('c:/path/to/java/bin/java.exe') mock_find_java.return_value = java_exe mock_find_grammars.return_value = [ AntlrGrammar(pathlib.Path('standalone/SomeGrammar.g4')) ] mock_run.return_value = subprocess.CompletedProcess([], 0) command.output['default'] = str(tmpdir.mkdir('gen')) command.run() args, _ = mock_run.call_args assert mock_run.called assert str(java_exe) in args[0] assert '-jar' in args[0]
def test_run_antlr_found(self, mock_find_grammars, mock_run, mock_find_antlr, mock_find_java, tmpdir, command): java_exe = pathlib.Path('c:/path/to/java/bin/java.exe') antlr_jar = pathlib.Path('antlr-4.5.3-complete.jar') mock_find_java.return_value = java_exe mock_find_antlr.return_value = antlr_jar mock_find_grammars.return_value = [ AntlrGrammar(pathlib.Path('standalone/SomeGrammar.g4')) ] mock_run.return_value = unittest.mock.Mock(returncode=0) command.output['default'] = str(tmpdir.mkdir('gen')) command.run() args, _ = mock_run.call_args assert mock_run.called assert str(antlr_jar) in args[0]
def test_run_package_not_exists(self, mock_find_grammars, mock_run, mock_find_antlr, mock_find_java, tmpdir, command): java_exe = pathlib.Path('c:/path/to/java/bin/java.exe') antlr_jar = pathlib.Path('antlr-4.5.3-complete.jar') mock_find_java.return_value = java_exe mock_find_antlr.return_value = antlr_jar grammar = AntlrGrammar(pathlib.Path('SomeGrammar.g4')) mock_find_grammars.return_value = [grammar] mock_run.return_value = unittest.mock.Mock(returncode=0) base_dir = str(tmpdir.mkdir('base')) package_dir = pathlib.Path(base_dir, 'some_grammar') package_init_file = pathlib.Path(package_dir, '__init__.py') command.output['default'] = base_dir os.chdir(str(base_dir)) command.run() assert package_init_file.exists()
def test_read_with_imports(self): grammar = AntlrGrammar(pathlib.Path('distributed', 'SomeGrammar.g4')) imports = set(grammar.read_imports()) assert len(imports) == 2 assert {'CommonTerminals', 'SharedRules'} == imports
def test_read_without_imports(self): grammar = AntlrGrammar(pathlib.Path('distributed', 'CommonTerminals.g4')) imports = grammar.read_imports() assert not imports
def test_read_without_imports(self): grammar = AntlrGrammar( pathlib.Path('distributed', 'CommonTerminals.g4')) imports = grammar.read_imports() assert not imports