예제 #1
0
    def test_running_plugin_cram_from_target(self,
                                             execute_mock,
                                             read_file_mock,
                                             os_mock,
                                             report_mock,
                                             find_files_mock,
                                             command_mock
                                             ):
        project = Project('.')
        project.set_property('cram_run_test_from_target', True)
        project.set_property('dir_dist', 'python')
        project.set_property('dir_dist_scripts', 'scripts')
        project.set_property('verbose', False)
        logger = Mock()

        command_mock.return_value = ['cram']
        find_files_mock.return_value = ['test1.cram', 'test2.cram']
        report_mock.return_value = 'report_file'
        os_mock.copy.return_value = {}
        read_file_mock.return_value = ['test failes for file', '# results']
        execute_mock.return_value = 0

        run_cram_tests(project, logger)
        execute_mock.assert_called_once_with(
            ['cram', 'test1.cram', 'test2.cram'], 'report_file',
            error_file_name='report_file',
            env={'PYTHONPATH': './python:', 'PATH': './python/scripts:'}
        )
        expected_info_calls = [call('Running Cram command line tests'),
                               call('Cram tests were fine'),
                               call('results'),
                               ]
        self.assertEquals(expected_info_calls, logger.info.call_args_list)
 def setUp(self):
     self.project = Project('/base/dir')
     self.reactor = Mock()
     pyb_env = Mock()
     self.reactor.python_env_registry = {"pybuilder": pyb_env}
     self.command = ExternalCommandBuilder('command-name', self.project,
                                           self.reactor)
예제 #3
0
    def test_running_plugin_failure_no_tests(self, read_file_mock, report_mock,
                                             find_files_mock, command_mock):
        project = Project('.')
        project.set_property('verbose', True)
        project.set_property('dir_source_main_python', 'python')
        project.set_property('dir_source_main_scripts', 'scripts')
        project.set_property("cram_fail_if_no_tests", True)
        project._plugin_env = {}
        logger = Mock()
        reactor = Mock()
        reactor.python_env_registry = {}
        reactor.python_env_registry["pybuilder"] = pyb_env = Mock()
        pyb_env.environ = {}
        execute_mock = pyb_env.execute_command = Mock()

        command_mock.return_value = ['cram']
        find_files_mock.return_value = []
        report_mock.return_value = 'report_file'
        read_file_mock.return_value = ['test failes for file', '# results']
        execute_mock.return_value = 1

        self.assertRaises(BuildFailedException, run_cram_tests, project,
                          logger, reactor)

        execute_mock.assert_not_called()
        expected_info_calls = [
            call('Running Cram command line tests'),
        ]
        self.assertEqual(expected_info_calls, logger.info.call_args_list)
예제 #4
0
def create_project():
    project = Project("/")
    project.build_depends_on("testingframework")
    project.depends_on("sometool")
    project.depends_on(
        "pyassert",
        url=
        "https://github.com/downloads/halimath/pyassert/pyassert-0.2.2.tar.gz")
    project.name = "Spam and Eggs"
    project.version = "1.2.3"
    project.summary = "This is a simple integration-test for distutils plugin."
    project.description = "As you might have guessed we have nothing to say here."
    project.authors = [
        Author("Udo Juettner", "*****@*****.**"),
        Author("Michael Gruber", "*****@*****.**")
    ]
    project.license = "WTFPL"
    project.url = "http://github.com/pybuilder/pybuilder"
    project.explicit_namespaces = ["foo.bar", "quick.brown.fox"]

    def return_dummy_list():
        return ["spam", "eggs"]

    project.list_scripts = return_dummy_list
    project.list_packages = return_dummy_list
    project.list_modules = return_dummy_list

    project.set_property(
        "distutils_classifiers",
        ["Development Status :: 5 - Beta", "Environment :: Console"])
    project.install_file("dir", "file1")
    project.install_file("dir", "file2")
    project.include_file("spam", "eggs")

    return project
예제 #5
0
 def setUp(self):
     self.logger = Mock()
     self.project = Project(".")
     self.project.set_property("dir_target", "dir_target_value")
     self.project.set_property("dir_source_main_python",
                               "dir_source_main_python_value")
     self.project.set_property("dir_reports", "dir_reports_value")
예제 #6
0
 def setUp(self):
     self.project = Project("unittest", ".")
     self.project.set_property("dir_install_logs", "any_directory")
     self.logger = mock(Logger)
     when(pybuilder.plugins.python.install_dependencies_plugin
          ).execute_command(any_value(), any_value(),
                            shell=True).thenReturn(0)
예제 #7
0
    def test_should_run_pylint_with_default_options(self, execute_tool):
        project = Project(".")
        init_pylint(project)

        execute_pylint(project, Mock(Logger))

        execute_tool.assert_called_with(project, "pylint", ["pylint"] + DEFAULT_PYLINT_OPTIONS, True)
예제 #8
0
 def setUp(self):
     self.tempdir = tempfile.mkdtemp(prefix="palp-")
     self.project = Project(basedir=self.tempdir,
                            name="palp",
                            version="123")
     self.project.set_property("dir_target", "target")
     self.bucket_name = "palp-lambda-zips"
     self.project.set_property(emr_tasks.PROPERTY_S3_FILE_ACCESS_CONTROL,
                               "bucket-owner-full-control")
     self.project.set_property(emr_tasks.PROPERTY_S3_BUCKET_NAME,
                               self.bucket_name)
     self.project.set_property(emr_tasks.PROPERTY_S3_BUCKET_PREFIX, "")
     self.project.set_property(emr_tasks.PROPERTY_S3_RELEASE_PREFIX,
                               "release")
     self.dir_target = os.path.join(
         self.tempdir, "target",
         emr_tasks._EMR_PACKAGE_DIR + "-" + self.project.version)
     os.makedirs(self.dir_target)
     for file in ["palp.zip", "bash-script.sh", "python-script.py"]:
         self.filepath = os.path.join(self.dir_target, file)
         self.test_data = b"testdata"
         with open(self.filepath, "wb") as fp:
             fp.write(self.test_data)
     self.my_mock_s3 = mock_s3()
     self.my_mock_s3.start()
     self.s3 = boto3.resource("s3")
     self.s3.create_bucket(Bucket=self.bucket_name)
예제 #9
0
    def prepare_build(self,
                      property_overrides=None,
                      project_directory=".",
                      project_descriptor="build.py",
                      exclude_optional_tasks=None,
                      exclude_tasks=None,
                      exclude_all_optional=False):
        if not property_overrides:
            property_overrides = {}
        Reactor._current_instance = self

        project_directory, project_descriptor = self.verify_project_directory(
            project_directory, project_descriptor)

        self.logger.debug("Loading project module from %s", project_descriptor)

        self.project = Project(basedir=project_directory)

        self.project_module = self.load_project_module(project_descriptor)

        self.apply_project_attributes()
        self.override_properties(property_overrides)

        self.logger.debug("Have loaded plugins %s", ", ".join(self._plugins))

        self.collect_tasks_and_actions_and_initializers(self.project_module)

        self.execution_manager.resolve_dependencies(exclude_optional_tasks,
                                                    exclude_tasks,
                                                    exclude_all_optional)
예제 #10
0
    def test_prepare_tasks(self):
        self.reactor.project = Project("spam")

        self.reactor.project.default_task = ["a", "b"]

        self.assertEqual(self.reactor._prepare_tasks(["c"]), ["c"])
        self.assertEqual(self.reactor._prepare_tasks(["+c"]), ["a", "b", "c"])
        self.assertEqual(self.reactor._prepare_tasks(["+c", '^c']), ["a", "b"])
        self.assertEqual(self.reactor._prepare_tasks(["^b"]), ["a"])
        self.assertEqual(self.reactor._prepare_tasks(["^a"]), ["b"])
        self.assertEqual(self.reactor._prepare_tasks(["^d"]), ["a", "b"])
        self.assertEqual(self.reactor._prepare_tasks(["+c", "d"]), ["d", "c"])
        self.assertEqual(self.reactor._prepare_tasks(["+c", "d", "^b"]), ["d", "c"])
        self.assertEqual(self.reactor._prepare_tasks(["+c", "+", "^"]), ["+", "^", "c"])
        self.assertEqual(self.reactor._prepare_tasks([]), ["a", "b"])

        self.reactor.project.default_task = []

        self.assertEqual(self.reactor._prepare_tasks(["c"]), ["c"])
        self.assertEqual(self.reactor._prepare_tasks(["+c"]), ["c"])
        self.assertEqual(self.reactor._prepare_tasks(["+c", "^d"]), ["c"])
        self.assertEqual(self.reactor._prepare_tasks(["+c", "d", "^d"]), ["c"])
        self.assertEqual(self.reactor._prepare_tasks(["^c", "c"]), [])
        self.assertEqual(self.reactor._prepare_tasks(["+c", "^c"]), [])
        self.assertEqual(self.reactor._prepare_tasks(["+c", "d"]), ["d", "c"])
        self.assertEqual(self.reactor._prepare_tasks(["+c", "+"]), ["+", "c"])

        self.assertRaises(PyBuilderException, self.reactor._prepare_tasks, [])
예제 #11
0
    def test_should_not_break_build_when_warnings_and_not_set(
            self, execute_tool, warnings):
        project = Project(".")
        init_pylint(project)
        project.set_property("pylint_break_build", False)

        execute_pylint(project, Mock(Logger))
예제 #12
0
    def test_should_write_pycharm_file(self, os, mock_open):
        project = Project('basedir', name='pybuilder')
        project.set_property('dir_source_main_python', 'src/main/python')
        mock_open.return_value = MagicMock(spec=TYPE_FILE)
        os.path.join.side_effect = lambda first, second: first + '/' + second

        pycharm_generate(project, Mock())

        mock_open.assert_called_with('basedir/.idea/pybuilder.iml', 'w')
        metadata_file = mock_open.return_value.__enter__.return_value
        metadata_file.write.assert_called_with(
            """<?xml version="1.0" encoding="UTF-8"?>
<!-- This file has been generated by the PyBuilder PyCharm Plugin -->

<module type="PYTHON_MODULE" version="4">
  <component name="NewModuleRootManager">
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/python" isTestSource="false" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
  </component>
  <component name="PyDocumentationSettings">
    <option name="myDocStringFormat" value="Plain" />
  </component>
  <component name="TestRunnerService">
    <option name="projectConfiguration" value="Unittests" />
    <option name="PROJECT_TEST_RUNNER" value="Unittests" />
  </component>
</module>
""")
예제 #13
0
    def test_running_plugin_failure_no_tests(self,
                                             execute_mock,
                                             read_file_mock,
                                             os_mock,
                                             report_mock,
                                             find_files_mock,
                                             command_mock
                                             ):
        project = Project('.')
        project.set_property('verbose', True)
        project.set_property('dir_source_main_python', 'python')
        project.set_property('dir_source_main_scripts', 'scripts')
        project.set_property("cram_fail_if_no_tests", True)
        logger = Mock()

        command_mock.return_value = ['cram']
        find_files_mock.return_value = []
        report_mock.return_value = 'report_file'
        os_mock.copy.return_value = {}
        read_file_mock.return_value = ['test failes for file', '# results']
        execute_mock.return_value = 1

        self.assertRaises(
            BuildFailedException, run_cram_tests, project, logger)

        execute_mock.assert_not_called()
        expected_info_calls = [call('Running Cram command line tests'),
                               ]
        self.assertEquals(expected_info_calls, logger.info.call_args_list)
 def setUp(self):
     self.project = Project("basedir")
     self.logger = Mock(Logger)
     self.reactor = Mock()
     self.pyb_env = pyb_env = Mock()
     self.reactor.python_env_registry = {"pybuilder": pyb_env}
     self.reactor.pybuilder_venv = pyb_env
예제 #15
0
    def test_should_generate_command_abiding_to_configuration(self):
        project = Project('egg')
        project.set_property("dir_manpages", "docs/man")
        project.set_property("manpage_source", "README.md")
        project.set_property("manpage_section", 1)

        self.assertEqual(build_generate_manpages_command(project), 'ronn -r --pipe README.md | gzip -9 > docs/man/egg.1.gz')
 def setUp(self) -> None:
     self.tmpDir = tempfile.mkdtemp()
     self.project = Project(basedir=self.tmpDir)
     self.project.set_property(ENVIRONMENT,"unit-test")
     core_plugin.init(self.project)
     init_plugin(self.project)
     init_python_directories(self.project)
예제 #17
0
    def test_running_plugin_fails(self, execute_mock, read_file_mock, os_mock,
                                  report_mock, find_files_mock, command_mock):
        project = Project('.')
        project.set_property('verbose', False)
        project.set_property('dir_source_main_python', 'python')
        project.set_property('dir_source_main_scripts', 'scripts')
        logger = Mock()

        command_mock.return_value = ['cram']
        find_files_mock.return_value = ['test1.cram', 'test2.cram']
        report_mock.return_value = 'report_file'
        os_mock.copy.return_value = {}
        read_file_mock.return_value = ['test failes for file', '# results']
        execute_mock.return_value = 1

        self.assertRaises(BuildFailedException, run_cram_tests, project,
                          logger)
        execute_mock.assert_called_once_with(
            ['cram', 'test1.cram', 'test2.cram'],
            'report_file',
            error_file_name='report_file',
            env={
                'PYTHONPATH': './python:',
                'PATH': './scripts:'
            })
        expected_info_calls = [
            call('Running Cram command line tests'),
        ]
        expected_error_calls = [
            call('Cram tests failed!'),
            call('results'),
            call("See: 'report_file' for details"),
        ]
        self.assertEquals(expected_info_calls, logger.info.call_args_list)
        self.assertEquals(expected_error_calls, logger.error.call_args_list)
예제 #18
0
    def test_should_run_pylint_with_custom_options(self, execute_tool):
        project = Project(".")
        init_pylint(project)
        project.set_property("pylint_options", ["--test", "-f", "--x=y"])

        execute_pylint(project, Mock(Logger))

        execute_tool.assert_called_with(project, "pylint", ["pylint", "--test", "-f", "--x=y"], True)
    def setUp(self):
        self.project = Project("basedir")

        self.reactor = Mock()
        self.reactor.python_env_registry = {}
        self.reactor.python_env_registry["pybuilder"] = pyb_env = Mock()
        pyb_env.environ = {}
        self.reactor.pybuilder_venv = pyb_env
    def test_should_delegate_to_project_get_property_when_attribute_is_not_defined(self):
        project_mock = Project(".")
        project_mock.has_property = Mock(return_value=True)
        project_mock.get_property = Mock(return_value="eggs")

        self.assertEqual("eggs", ProjectDictWrapper(project_mock, Mock())["spam"])

        project_mock.get_property.assert_called_with("spam")
    def test_should_delegate_to_project_get_property_when_attribute_is_not_defined(
            self):
        project_mock = Project(".")
        when(project_mock).get_property("spam", "spam").thenReturn("eggs")

        self.assertEquals("eggs", ProjectDictWrapper(project_mock)["spam"])

        verify(project_mock).get_property("spam", "spam")
예제 #22
0
    def test_should_break_build_when_warnings_and_set(self, execute_tool,
                                                      warnings):
        project = Project(".")
        init_pylint(project)
        project.set_property("pylint_break_build", True)

        with self.assertRaises(BuildFailedException):
            execute_pylint(project, Mock(Logger))
예제 #23
0
 def setUp(self):
     self.project = Project("any-project")
     self.project.version = "0.0.1"
     self.project.set_property("sonarqube_project_key", "project_key")
     self.project.set_property("sonarqube_project_name", "project_name")
     self.project.set_property("dir_source_main_python", "src/main/python")
     self.project.set_property("dir_target", "target")
     self.project.set_property("dir_reports", "target/reports")
예제 #24
0
 def setUp(self):
     self.patch_popen = mock.patch(
         "pybuilder_emr_plugin.emr_tasks.subprocess.Popen")
     self.mock_popen = self.patch_popen.start()
     self.mock_process = mock.Mock()
     self.mock_process.returncode = 0
     self.mock_popen.return_value = self.mock_process
     self.input_project = Project(".")
     self.mock_logger = mock.Mock()
예제 #25
0
 def test_find_files(self, discover_mock):
     project = Project('.')
     project.set_property('dir_source_cmdlinetest', '/any/dir')
     project.set_property('cram_test_file_glob', '*.t')
     expected = ['/any/dir/test.cram']
     discover_mock.return_value = expected
     received = _find_files(project)
     self.assertEquals(expected, received)
     discover_mock.assert_called_once_with('/any/dir', '*.t')
    def test_should_merge_additional_environment_into_current_one(self):
        project = Project('any-directory')
        project.set_property('integrationtest_additional_environment',
                             {'foo': 'bar'})
        environment = {'bar': 'baz'}

        add_additional_environment_keys(environment, project)

        self.assertEqual(environment, {'foo': 'bar', 'bar': 'baz'})
    def setUp(self):
        self.project = Project('/base/dir')
        self.reactor = Mock()
        pyb_env = Mock()
        self.reactor.python_env_registry = {"pybuilder": pyb_env}
        self.reactor.pybuilder_venv = pyb_env

        self.command = ExternalCommandBuilder('command-name', self.project,
                                              self.reactor)
        self.command.use_argument('--foo').use_argument('--bar')
예제 #28
0
def test_non_pypi_server_passed(mocker):  # pylint: disable=invalid-name
    """ Check init_pypi_server_plugin function"""
    project = Project("basedir")
    logger_mock = mocker.Mock()
    init_pypi_server_plugin(project, logger_mock)
    assert not logger_mock.info.called
    reinitialize_pypi_server_plugin(project, logger_mock)
    logger_mock.warn.assert_called_once_with(
        "No pypi server passed. "
        "Consider removing pypi_server plugin.")
    def test_should_override_current_environment_keys_with_additional_environment(
            self):
        project = Project('any-directory')
        project.set_property('integrationtest_additional_environment',
                             {'foo': 'mooh'})
        environment = {'foo': 'bar'}

        add_additional_environment_keys(environment, project)

        self.assertEqual(environment, {'foo': 'mooh'})
예제 #30
0
    def setUp(self):
        self.project = Project("basedir")
        self.project.set_property("dir_source_main_python", "source")
        self.project.set_property("dir_reports", "reports")

        self.reactor = Mock()
        self.reactor.python_env_registry = {}
        self.reactor.python_env_registry["pybuilder"] = pyb_env = Mock()
        pyb_env.environ = {}
        self.reactor.pybuilder_venv = pyb_env