예제 #1
0
    def test_adds_new_test_classes_to_existing_test_module(self):
        test_class = create(TestClass, name="TestSomethingNew",
          associated_modules=[self.project.create_module("module.py")])
        add_test_case_to_project(self.project, test_class)

        assert_equal_sets([self.existing_test_class, test_class],
                          get_test_cases(self.project))
예제 #2
0
    def test_overwrites_existing_test_methods_with_force_option(self):
        test_method = create(TestMethod, name="test_method")
        test_class = create(TestClass,
                            name="TestSomething",
                            test_cases=[test_method])
        add_test_case_to_project(self.project, test_class)

        assert_equal([test_method], get_test_cases(self.project)[0].test_cases)

        # Let's try adding the same method again with a force option
        # set to True.
        new_test_method = create(TestMethod, name="test_method")
        new_test_class = create(TestClass,
                                name="TestSomething",
                                test_cases=[new_test_method])
        add_test_case_to_project(self.project, new_test_class, force=True)

        # The class is still the same.
        assert_equal([self.existing_test_class], get_test_cases(self.project))
        # But the method got replaced.
        assert_equal([new_test_method],
                     get_test_cases(self.project)[0].test_cases)
        # The right message was issued.
        assert_contains_once(
            self._get_log_output(),
            "Replacing TestSomething.test_method from test_module.py with generated version."
        )
예제 #3
0
 def test_should_not_touch_modules_with_errors(self):
     project = EmptyProject()
     module = project.create_module("module.py")
     test_module = project.create_module("test_module.py",
                                         errors=[Exception()])
     add_test_case_to_project(
         project, create(TestClass, associated_modules=[module]))
     assert test_module.changed is False
예제 #4
0
 def test_should_not_touch_modules_with_errors(self):
     project = EmptyProject()
     module = project.create_module("module.py")
     test_module = project.create_module("test_module.py",
         errors=[Exception()])
     add_test_case_to_project(project,
         create(TestClass, associated_modules=[module]))
     assert test_module.changed is False
예제 #5
0
 def test_should_emit_warning_when_trying_to_add_test_to_module_with_errors(self):
     project = EmptyProject()
     module = project.create_module("module.py")
     project.create_module("test_module.py", errors=[Exception()])
     add_test_case_to_project(project,
         create(TestClass, name="FooTest", associated_modules=[module]))
     assert_contains_once(self._get_log_output(),
         "WARNING: Not adding FooTest to test_module.py, because "
         "of a failed inspection.")
예제 #6
0
    def test_keeps_future_imports_first(self):
        module = self._test_module_from_code("from __future__ import division\n")
        self.generator.ensure_import(('nose', 'SkipTest'))
        klass = self._test_class_from_code("", "TestClass", "test_method")

        add_test_case_to_project(self.project, klass)

        assert_matches(r"from __future__ import division.*from nose import SkipTest",
            module.get_content())
예제 #7
0
    def test_adds_new_test_classes_to_existing_test_module(self):
        test_class = create(
            TestClass,
            name="TestSomethingNew",
            associated_modules=[self.project.create_module("module.py")])
        add_test_case_to_project(self.project, test_class)

        assert_equal_sets([self.existing_test_class, test_class],
                          get_test_cases(self.project))
예제 #8
0
    def test_attaches_test_class_to_test_module_with_most_test_cases_for_associated_module(self):
        self.project.create_module("irrelevant_test_module.py")
        self._associate_module_with_existing_test_class()

        new_test_class = create(TestClass, name="new",
          associated_modules=[self.associated_module])
        add_test_case_to_project(self.project, new_test_class)

        assert new_test_class in self.test_module.test_cases
예제 #9
0
    def test_keeps_future_imports_first(self):
        module = self._test_module_from_code(
            "from __future__ import division\n")
        self.generator.ensure_import(('nose', 'SkipTest'))
        klass = self._test_class_from_code("", "TestClass", "test_method")

        add_test_case_to_project(self.project, klass)

        assert_matches(
            r"from __future__ import division.*from nose import SkipTest",
            module.get_content())
예제 #10
0
    def test_adds_new_test_methods_to_existing_test_classes(self):
        test_method = create(TestMethod, name="test_new_method")
        test_class = create(TestClass, name="TestSomething", test_cases=[test_method])
        add_test_case_to_project(self.project, test_class)

        assert_length(get_test_cases(self.project), 1)
        assert get_test_cases(self.project)[0] is test_method.parent
        assert test_method.parent is not test_class
        # The right message was issued.
        assert_contains_once(self._get_log_output(),
                             "Adding generated test_new_method to TestSomething in test_module.py.")
예제 #11
0
    def test_attaches_test_class_to_test_module_with_most_test_cases_for_associated_module(
            self):
        self.project.create_module("irrelevant_test_module.py")
        self._associate_module_with_existing_test_class()

        new_test_class = create(TestClass,
                                name="new",
                                associated_modules=[self.associated_module])
        add_test_case_to_project(self.project, new_test_class)

        assert new_test_class in self.test_module.test_cases
예제 #12
0
 def test_should_emit_warning_when_trying_to_add_test_to_module_with_errors(
         self):
     project = EmptyProject()
     module = project.create_module("module.py")
     project.create_module("test_module.py", errors=[Exception()])
     add_test_case_to_project(
         project,
         create(TestClass, name="FooTest", associated_modules=[module]))
     assert_contains_once(
         self._get_log_output(),
         "WARNING: Not adding FooTest to test_module.py, because "
         "of a failed inspection.")
예제 #13
0
    def test_adds_new_test_methods_to_existing_test_classes_inside_application_modules(self):
        project = EmptyProject().with_module("somethings.py")
        test_class = create(TestClass, name="TestSomething")
        add_test_case(project["somethings"], test_class)

        method = create(TestMethod)
        generated_test_class = create(TestClass, name="TestSomething",
          test_cases=[method])
        add_test_case_to_project(project, generated_test_class)

        assert_length(get_test_cases(project), 1)
        assert_equal_sets([method], test_class.test_cases)
        assert method.parent is test_class
예제 #14
0
    def test_adds_new_test_methods_to_existing_test_classes(self):
        test_method = create(TestMethod, name="test_new_method")
        test_class = create(TestClass,
                            name="TestSomething",
                            test_cases=[test_method])
        add_test_case_to_project(self.project, test_class)

        assert_length(get_test_cases(self.project), 1)
        assert get_test_cases(self.project)[0] is test_method.parent
        assert test_method.parent is not test_class
        # The right message was issued.
        assert_contains_once(
            self._get_log_output(),
            "Adding generated test_new_method to TestSomething in test_module.py."
        )
예제 #15
0
    def test_adds_new_test_methods_to_existing_test_classes_inside_application_modules(
            self):
        project = EmptyProject().with_module("somethings.py")
        test_class = create(TestClass, name="TestSomething")
        add_test_case(project["somethings"], test_class)

        method = create(TestMethod)
        generated_test_class = create(TestClass,
                                      name="TestSomething",
                                      test_cases=[method])
        add_test_case_to_project(project, generated_test_class)

        assert_length(get_test_cases(project), 1)
        assert_equal_sets([method], test_class.test_cases)
        assert method.parent is test_class
예제 #16
0
    def test_appends_new_test_methods_to_test_classes_with_proper_indentation(self):
        module = self._test_module_from_code(
            "class NewTestClass(unittest.TestCase):\n"\
            "    def test_some_method(self):\n"\
            "        assert False # c'mon, implement me\n")
        klass = self._test_class_from_code(
            "class NewTestClass(unittest.TestCase):\n"\
            "    def test_new_method(self):\n"\
            "        assert True # ha!\n",
            "NewTestClass", "test_new_method")
        expected_output = "class NewTestClass(unittest.TestCase):\n"\
            "    def test_some_method(self):\n"\
            "        assert False # c'mon, implement me\n\n"\
            "    def test_new_method(self):\n"\
            "        assert True # ha!\n"

        add_test_case_to_project(self.project, klass)

        assert_equal_strings(expected_output, module.get_content())
예제 #17
0
    def test_doesnt_overwrite_existing_test_methods_by_default(self):
        test_method = create(TestMethod, name="test_method")
        test_class = create(TestClass, name="TestSomething",
          test_cases=[test_method])
        add_test_case_to_project(self.project, test_class)

        assert_equal([test_method],
                     get_test_cases(self.project)[0].test_cases)

        # Let's try adding the same method again.
        new_test_method = create(TestMethod, name="test_method")
        new_test_class = create(TestClass, name="TestSomething",
          test_cases=[new_test_method])
        add_test_case_to_project(self.project, new_test_class)

        assert_equal([test_method],
                     get_test_cases(self.project)[0].test_cases)
        # The right message was issued.
        assert_contains_once(self._get_log_output(),
                             "Test case TestSomething.test_method already exists in test_module.py, skipping.")
예제 #18
0
    def test_appends_new_test_methods_to_test_classes_with_proper_indentation(
            self):
        module = self._test_module_from_code(
            "class NewTestClass(unittest.TestCase):\n"\
            "    def test_some_method(self):\n"\
            "        assert False # c'mon, implement me\n")
        klass = self._test_class_from_code(
            "class NewTestClass(unittest.TestCase):\n"\
            "    def test_new_method(self):\n"\
            "        assert True # ha!\n",
            "NewTestClass", "test_new_method")
        expected_output = "class NewTestClass(unittest.TestCase):\n"\
            "    def test_some_method(self):\n"\
            "        assert False # c'mon, implement me\n\n"\
            "    def test_new_method(self):\n"\
            "        assert True # ha!\n"

        add_test_case_to_project(self.project, klass)

        assert_equal_strings(expected_output, module.get_content())
예제 #19
0
    def test_doesnt_overwrite_existing_test_methods_by_default(self):
        test_method = create(TestMethod, name="test_method")
        test_class = create(TestClass,
                            name="TestSomething",
                            test_cases=[test_method])
        add_test_case_to_project(self.project, test_class)

        assert_equal([test_method], get_test_cases(self.project)[0].test_cases)

        # Let's try adding the same method again.
        new_test_method = create(TestMethod, name="test_method")
        new_test_class = create(TestClass,
                                name="TestSomething",
                                test_cases=[new_test_method])
        add_test_case_to_project(self.project, new_test_class)

        assert_equal([test_method], get_test_cases(self.project)[0].test_cases)
        # The right message was issued.
        assert_contains_once(
            self._get_log_output(),
            "Test case TestSomething.test_method already exists in test_module.py, skipping."
        )
예제 #20
0
    def test_overwrites_existing_test_methods_with_force_option(self):
        test_method = create(TestMethod, name="test_method")
        test_class = create(TestClass, name="TestSomething", test_cases=[test_method])
        add_test_case_to_project(self.project, test_class)

        assert_equal([test_method],
                     get_test_cases(self.project)[0].test_cases)

        # Let's try adding the same method again with a force option
        # set to True.
        new_test_method = create(TestMethod, name="test_method")
        new_test_class = create(TestClass, name="TestSomething",
          test_cases=[new_test_method])
        add_test_case_to_project(self.project, new_test_class, force=True)

        # The class is still the same.
        assert_equal([self.existing_test_class],
                     get_test_cases(self.project))
        # But the method got replaced.
        assert_equal([new_test_method],
                     get_test_cases(self.project)[0].test_cases)
        # The right message was issued.
        assert_contains_once(self._get_log_output(),
                             "Replacing TestSomething.test_method from test_module.py with generated version.")
예제 #21
0
 def _add_tests_for_module(self, module, project, force):
     log.info("Generating tests for module %s." % module.subpath)
     for test_case in self._generate_test_cases(module):
         add_test_case_to_project(project, test_case, self.main_snippet, force)
예제 #22
0
    def test_merges_imports_during_merging_of_test_classes(self):
        test_class = TestClass("TestSomething", imports=['new_import'])
        add_test_case_to_project(self.project, test_class)

        assert_equal(['new_import'], self.test_module.imports)
예제 #23
0
    def test_merges_imports_during_merging_of_test_classes(self):
        test_class = TestClass("TestSomething", imports=['new_import'])
        add_test_case_to_project(self.project, test_class)

        assert_equal(['new_import'], self.test_module.imports)
예제 #24
0
    def test_doesnt_overwrite_existing_test_classes_by_default(self):
        test_class = create(TestClass, name="TestSomething")
        add_test_case_to_project(self.project, test_class)

        assert_length(get_test_cases(self.project), 1)
예제 #25
0
 def _add_tests_for_module(self, module, project, force):
     log.info("Generating tests for module %s." % module.subpath)
     for test_case in self._generate_test_cases(module):
         add_test_case_to_project(project, test_case, self.main_snippet, force)
예제 #26
0
    def test_doesnt_overwrite_existing_test_classes_by_default(self):
        test_class = create(TestClass, name="TestSomething")
        add_test_case_to_project(self.project, test_class)

        assert_length(get_test_cases(self.project), 1)