def test_exists(self):
        checkout_path = join(self.checkouts_dir, "-project-", "-version-",
                             "checkout")
        create_file(join(checkout_path, "bundle.zip"))
        create_file(join(checkout_path, "foo"))

        assert self.uut.exists()
예제 #2
0
    def test_finds_versions(self):
        version = create_version("v1", project=self.uut)
        create_file(version._version_file)

        versions = self.uut.versions

        assert_equals([version], versions)
예제 #3
0
    def setup(self):
        self.tmp = mkdtemp()
        self.remote_file = join(self.tmp, "remote.file")
        create_file(self.remote_file)
        self.url = Path(self.remote_file).as_uri()

        self.target = join(self.tmp, "local.file")
예제 #4
0
    def test_copies_original_sources(self):
        self.mock_with_fake_compile()
        create_file(join(self.source_path, "a.file"))

        self.uut.process_project_version(self.project, self.version)

        assert exists(join(self.original_sources_path, "a.file"))
예제 #5
0
    def test_copies_additional_sources(self):
        self.mock_with_fake_compile()
        create_file(join(self.version_path, "compile", "additional.file"))

        self.uut.process_project_version(self.project, self.version)

        assert exists(join(self.build_path, "additional.file"))
예제 #6
0
    def setup(self):
        self.temp_dir = mkdtemp(prefix="mubench-pattern-test_")
        self.orig_dir = join(join(self.temp_dir, "origin"))
        makedirs(self.orig_dir, exist_ok=True)

        self.pattern_file_name = "pattern.java"
        self.pattern_file_path = join(self.temp_dir, self.pattern_file_name)
        create_file(self.pattern_file_path)
예제 #7
0
    def test_skips_compile_if_classes_exist(self):
        self.mock_with_fake_compile()
        makedirs(self.original_classes_path)
        create_file(join(self.source_path, "some.file"))

        self.uut.process_project_version(self.project, self.version)

        assert not exists(join(self.original_classes_path, "some.file"))
예제 #8
0
    def test_forces_clean_copy_of_original_sources(self):
        self.mock_with_fake_compile()
        create_file(join(self.original_sources_path, "old.file"))
        self.uut.force_compile = True

        self.uut.process_project_version(self.project, self.version)

        assert not exists(join(self.original_sources_path, "old.file"))
예제 #9
0
    def test_filters_blacklisted(self):
        project = create_project("-id-", base_path=self.temp_dir)
        create_file(project._project_file)
        uut = CollectProjectsTask(self.temp_dir)

        actual = uut.run(DataEntityLists([], ["-id-"]))

        assert_equals([], actual)
예제 #10
0
    def test_copies_misuse_sources(self):
        self.mock_with_fake_compile()
        create_file(join(self.source_path, "mu.file"))
        self.version.misuses.append(create_misuse("1", meta={"location": {"file": "mu.file"}}, project=self.project))

        self.uut.process_project_version(self.project, self.version)

        assert exists(join(self.misuse_source_path, "mu.file"))
예제 #11
0
 def create_classes(source, destination, _):
     for root, dirs, files in os.walk(source):
         package = relpath(root, source)
         for file in files:
             file = file.replace(".java", ".class")
             create_file(join(destination, package, file))
             print("fake compile: {}".format(
                 join(destination, package, file)))
예제 #12
0
    def setup(self):
        self.temp_dir = mkdtemp(prefix="mubench-correct_usage-test_")
        self.orig_dir = join(join(self.temp_dir, "origin"))
        makedirs(self.orig_dir, exist_ok=True)

        self.correct_usage_file_name = "correct_usage.java"
        self.correct_usage_file_path = join(self.temp_dir,
                                            self.correct_usage_file_name)
        create_file(self.correct_usage_file_path)
예제 #13
0
    def setup(self):
        self.checkouts_path = mkdtemp(prefix="mubench-checkout-local_")
        self.data_path = mkdtemp(prefix="mubench-checkout-local-data_")
        self.data_file_name = "some.file"
        create_file(join(self.data_path, "repo", self.data_file_name))

        self.uut = SyntheticProjectCheckout("-project-", "-id-",
                                            self.data_path,
                                            self.checkouts_path)
    def test_delete(self):
        checkout_path = join(self.checkouts_dir, "-project-", "-version-",
                             "checkout")
        create_file(join(checkout_path, "bundle.zip"))
        create_file(join(checkout_path, "foo"))

        self.uut.delete()

        assert not exists(checkout_path)
    def test_finds_misuses(self):
        misuse = create_misuse("1",
                               project=create_project(self.project_id,
                                                      base_path=self.temp_dir))
        create_file(misuse.misuse_file)
        self.uut._YAML = {"misuses": ["1"]}

        actual_misuses = self.uut.misuses

        assert_equals([misuse], actual_misuses)
예제 #16
0
    def test_forces_compile(self):
        self.mock_with_fake_compile()
        makedirs(self.original_classes_path)
        create_file(join(self.source_path, "some.file"))
        makedirs(self.pattern_classes_path)
        self.uut.force_compile = True

        self.uut.process_project_version(self.project, self.version)

        assert exists(join(self.original_classes_path, "some.file"))
예제 #17
0
 def mock_compile(commands: List[str], cwd: str, dep_dir: str):
     source_path = join(cwd, self.source_dir)
     class_path = join(cwd, "classes")
     makedirs(class_path, exist_ok=True)
     for root, dirs, files in os.walk(source_path):
         package = relpath(root, source_path)
         for file in files:
             file = file.replace(".java", ".class")
             create_file(join(class_path, package, file))
             print("fake compile: {}".format(join(class_path, package, file)))
예제 #18
0
    def test_finds_all_projects(self):
        p1 = create_project("p1", base_path=self.temp_dir)
        create_file(p1._project_file)
        p2 = create_project("p2", base_path=self.temp_dir)
        create_file(p2._project_file)
        uut = CollectProjectsTask(self.temp_dir)

        actual = uut.run(DataEntityLists([], []))

        assert_equals([p1, p2], actual)
    def test_finds_all_projects(self):
        p1 = create_project("p1", base_path=self.temp_dir)
        create_file(p1._project_file)
        p2 = create_project("p2", base_path=self.temp_dir)
        create_file(p2._project_file)

        self.uut.run()

        assert_equals([call(p1), call(p2)],
                      self.test_task.process_project.call_args_list)
    def test_finds_only_own_misuses(self):
        project = create_project(self.project_id, base_path=self.temp_dir)
        misuse1 = create_misuse("1", project=project)
        create_file(misuse1.misuse_file)
        misuse2 = create_misuse("2", project=project)
        create_file(misuse2.misuse_file)
        self.uut._YAML = {"misuses": ["2"]}

        misuses = self.uut.misuses

        assert_equals([misuse2], misuses)
예제 #21
0
    def setup(self):
        self.temp_dir = mkdtemp(prefix="mubench-compile-correct_usages-test_")
        self.data_base_path = join(self.temp_dir, "data")
        self.compile_base_path = join(self.temp_dir, "-compile-")

        self.project = create_project("-project-",
                                      base_path=self.data_base_path)
        self.version = create_version("-version-", project=self.project)
        self.correct_usage = CorrectUsage(
            join(self.data_base_path, "-project-", "misuses", "-misuse-",
                 "correct-usages"), join("-package-", "-correct_usage-.java"))
        create_file(self.correct_usage.path)
        self.misuse = create_misuse("-misuse-",
                                    project=self.project,
                                    version=self.version,
                                    correct_usages=[self.correct_usage],
                                    meta={})
        self.version._YAML = {
            "build": {
                "src": "src/java",
                "classes": "target/classes"
            }
        }

        self.compile = self.version.get_compile(self.compile_base_path)
        self.compile.get_full_classpath = lambda: join(self.temp_dir,
                                                       "dependencies.jar")

        create_file(
            join(self.compile.original_sources_paths[0],
                 self.misuse.location.file))

        self.misuse_compile = self.misuse.get_misuse_compile(
            self.compile_base_path)
        self.misuse.get_misuse_compile = lambda *_: self.misuse_compile

        self.compile_patch = patch(
            'tasks.implementations.compile_misuse.CompileMisuseTask._compile_correct_usages'
        )
        self.compile_mock = self.compile_patch.start()

        def create_classes(source, destination, _):
            for root, dirs, files in os.walk(source):
                package = relpath(root, source)
                for file in files:
                    file = file.replace(".java", ".class")
                    create_file(join(destination, package, file))
                    print("fake compile: {}".format(
                        join(destination, package, file)))

        self.compile_mock.side_effect = create_classes
예제 #22
0
    def test_copies_misuse_sources(self):
        uut = CompileMisuseTask(self.compile_base_path, 0, force_compile=False)

        create_file(join(self.compile.original_sources_paths[0], "mu.file"))
        misuse = create_misuse("1",
                               meta={"location": {
                                   "file": "mu.file"
                               }},
                               project=self.project,
                               version=self.version)

        correct_usage_compile = uut.run(misuse, self.compile)

        assert exists(join(correct_usage_compile.misuse_source_path,
                           "mu.file"))
예제 #23
0
    def test_existent_misuse(self, _):
        self.uut._report_unknown_misuse = MagicMock()
        project = create_project("-project-", meta={})
        version = create_version("-id-", meta={"misuses": ["-misuse-"]}, project=project)

        project.path = mkdtemp(prefix="mubench_test-dataset-check_")
        try:
            misuse_yml_path = join(project.path, Project.MISUSES_DIR, "-misuse-", Misuse.MISUSE_FILE)
            create_file(misuse_yml_path)

            self.uut.run(project, version)

            self.uut._report_unknown_misuse.assert_not_called()
        finally:
            remove_tree(project.path)
예제 #24
0
파일: test_io.py 프로젝트: zqcui/MUBench
    def test_zip_dir_contents(self):
        src1 = join(self.temp_dir, "src1")
        src2 = join(self.temp_dir, "src2")
        create_file(join(src1, "file1"))
        create_file(join(src2, "file2"))
        sources = [src1, src2]
        destination = join(self.temp_dir, "archive")

        zip_dir_contents(sources, destination)

        extract_destination = join(self.temp_dir, "extracted")
        with zipfile.ZipFile(destination, 'r') as zip_file:
            zip_file.extractall(extract_destination)

        assert exists(join(extract_destination, "file1"))
        assert exists(join(extract_destination, "file2"))
예제 #25
0
    def test_copies_misuse_inner_classes(self):
        self.mock_with_fake_compile()
        def mock_compile(commands: List[str], cwd: str, dep_dir: str, compile_base_path: str, logger: Logger):
            class_path = join(cwd, "classes")
            makedirs(class_path, exist_ok=True)
            create_file(join(class_path, "mu.class"))
            create_file(join(class_path, "mu$1.class"))
            create_file(join(class_path, "mu$Inner.class"))

        self.uut._compile = MagicMock(side_effect=mock_compile)
        create_file(join(self.source_path, "mu.java"))
        self.version.misuses.append(create_misuse("1", meta={"location": {"file": "mu.java"}}, project=self.project))

        self.uut.process_project_version(self.project, self.version)

        assert exists(join(self.misuse_classes_path, "mu.class"))
        assert exists(join(self.misuse_classes_path, "mu$1.class"))
        assert exists(join(self.misuse_classes_path, "mu$Inner.class"))
예제 #26
0
파일: test_io.py 프로젝트: zqcui/MUBench
    def test_removes_folder_completely(self):
        create_file(join(self.temp_dir, "dir1", "dir2", "file1"))
        create_file(join(self.temp_dir, "dir1", "file2"))
        create_file(join(self.temp_dir, "file3"))

        remove_tree(self.temp_dir)

        assert not exists(self.temp_dir)
예제 #27
0
파일: test_io.py 프로젝트: zqcui/MUBench
    def test_copies_tree(self):
        src = join(self.temp_dir, "src")
        file1 = join("dir1", "dir2", "file1")
        file2 = join("dir1", "file2")
        file3 = join("file3")
        create_file(join(src, file1))
        create_file(join(src, file2))
        create_file(join(src, file3))

        copy_tree(src, self.temp_dir)

        assert exists(join(self.temp_dir, file1))
        assert exists(join(self.temp_dir, file2))
        assert exists(join(self.temp_dir, file3))
    def test_ignores_non_project_directories(self):
        create_file(join(self.temp_dir, "p1", "iamnotaproject.yml"))

        self.uut.run()

        self.test_task.process_project.assert_not_called()
예제 #29
0
 def create_pattern(self, filename):
     pattern = Pattern(self.temp_dir, filename)
     create_file(pattern.path)
     return pattern
예제 #30
0
 def create_misuse_with_pattern(self, misuse_id, pattern_file):
     misuse = create_misuse(misuse_id, project=self.project)
     create_file(join(self.source_path, misuse.location.file))
     misuse._PATTERNS = {self.create_pattern(pattern_file)}
     self.version._MISUSES = [misuse]