def test_git_files_as_input():

    bare_repo = Repo("./")
    assert bare_repo
    path = "Framework/orchestrator.py"
    path = "Tests/GraphBuilderTests.py"
    relevant_commits = list(bare_repo.iter_commits(paths=path))

    revlist = (
        (commit, (commit.tree / path).data_stream.read())
        for commit in relevant_commits
    )

    revisions = []
    for commit, filecontents in revlist:
        str_file_contents = str(filecontents).split("\\n")
        revisions.append(str_file_contents)

    revisions = Reverse(revisions)
    input_source = StubbedInputSource(revisions)
    mapper = SimpleMapper()
    csv_serializer = CsvFileSerializer("Data", "actual_code.csv")
    networkx_graph = NetworkxGraph(csv_serializer)
    slicer = LineSlicer(networkx_graph)
    orchestrator = Orchestrator(input_source, mapper, networkx_graph, slicer)
    beginning = orchestrator.orchestrate()
    j = 0
def test_check_displacement():
    rev1 = [
        "a",
        "b.1",
        "b.2",
        "c",
        "b.3"
    ]

    rev2 = [
        "a",
        "b.1",
        "b.2",
        "b.3",
        "c"
    ]

    revisions = [rev1, rev2]
    input_source = StubbedInputSource(revisions)
    mapper = SimpleMapper()
    in_memory_serializer = InMemorySerializer()
    networkx_graph = NetworkxGraph(in_memory_serializer)
    slicer = LineSlicer(networkx_graph)
    orchestrator = Orchestrator(input_source, mapper, networkx_graph, slicer)
    beginning = orchestrator.orchestrate()

    assert beginning[1][3].label == "u"
    assert beginning[1][4].label == "a"
def test_deserialization():
    rev1 = [
        "a",
        "b",
        "c",
        "d",
        "e",
        "fd",
        "z"
    ]

    rev2 = [
        "a",
        "x",
        "c",
        "e",
        "y",
        "z.1"
    ]
    revisions = [rev1, rev2]
    input_source = StubbedInputSource(revisions)
    mapper = SimpleMapper()
    csv_serializer = CsvFileSerializer("Data", "deserizalized.csv")
    networkx_graph = NetworkxGraph(csv_serializer)
    slicer = LineSlicer(networkx_graph)
    orchestrator = Orchestrator(input_source, mapper, networkx_graph, slicer)
    beginning = orchestrator.orchestrate()
    assert beginning[1][0].label == "u"
    assert beginning[1][2].label == "u"
    assert beginning[1][3].label == "u"
def test_graph_building_via_deserialization():
    rev1 = ReadTextFromFile("Data/dummy_test_rev1.txt")
    rev2 = ReadTextFromFile("Data/dummy_test_rev2.txt")
    rev3 = ReadTextFromFile("Data/dummy_test_rev3.txt")
    rev4 = ReadTextFromFile("Data/dummy_test_rev4.txt")
    revisions = [rev1, rev2, rev3, rev4]
    input_source = StubbedInputSource(revisions)

    csv_serializer = CsvFileSerializer("Data", "multi_line.csv")
    serializer = InMemorySerializer()
    mappings = csv_serializer.deserialize(os.path.join("Data", "multi_line.csv"))
    mapper = SimpleMapper(mappings)
    networkx_graph = NetworkxGraph(serializer)
    slicer = LineSlicer(networkx_graph)
    orchestrator = Orchestrator(input_source, mapper, networkx_graph, slicer)
    beginning = orchestrator.orchestrate()

    assert mapper.get_mapping(1, 1, 1) == mappings[0][1][1]
    assert mapper.get_mapping(2, 2, 1) == mappings[0][2][2]
    assert mapper.get_mapping(7, 7, 1) == mappings[0][7][7]

    assert mapper.get_mapping(1, 1, 2) == mappings[1][1][1]
    assert mapper.get_mapping(5, 4, 2) == mappings[1][5][4]

    assert mapper.get_mapping(1, 1, 3) == mappings[2][1][1]
def test_multiple_files():
    rev1 = ReadTextFromFile("Data/dummy_test_rev1.txt")
    rev2 = ReadTextFromFile("Data/dummy_test_rev2.txt")
    rev3 = ReadTextFromFile("Data/dummy_test_rev3.txt")
    rev4 = ReadTextFromFile("Data/dummy_test_rev4.txt")
    revisions = [rev1, rev2, rev3, rev4]
    # networkx_graph = NetworkxGraph()
    # simple_matcher = SimpleMatcher()
    # gb_obj = gb.GraphBuilder(simple_matcher, networkx_graph)
    # beginning = gb_obj.build_graph(revisions)
    input_source = StubbedInputSource(revisions)
    mapper = SimpleMapper()
    in_memory_serializer = InMemorySerializer()
    networkx_graph = NetworkxGraph(in_memory_serializer)
    slicer = LineSlicer(networkx_graph)
    visualizer = CommandLineVisualizer()
    orchestrator = Orchestrator(input_source, mapper, networkx_graph, slicer, visualizer)
    beginning = orchestrator.orchestrate()
    print(beginning[2][4].label)
    # nodes, content = orchestrator.slice(3, 5)
    # print(content)

    nodes, content = orchestrator.slice_updated(4, 1, 1, 4, True)
    revisions = orchestrator.visualize(content)
    print(sorted(content))
def test_git_url_as_input():
    input_url = "https://github.com/saurabhc123/cs5704/blob/master/Tests/GraphBuilderTests.py"
    input_source = GitInputSource(input_url)
    mapper = SimpleMapper()
    csv_serializer = CsvFileSerializer("Data", "git_url_code.csv")
    networkx_graph = NetworkxGraph(csv_serializer)
    slicer = LineSlicer(networkx_graph)
    orchestrator = Orchestrator(input_source, mapper, networkx_graph, slicer)
    beginning = orchestrator.orchestrate()
    j = 0
def test_with_actual_files():
    rev1 = ReadTextFromFile("Data/Rev1")
    rev2 = ReadTextFromFile("Data/Rev2")
    revisions = [rev1, rev2]
    input_source = StubbedInputSource(revisions)
    mapper = SimpleMapper()
    in_memory_serializer = InMemorySerializer()
    networkx_graph = NetworkxGraph(in_memory_serializer)
    slicer = LineSlicer(networkx_graph)
    orchestrator = Orchestrator(input_source, mapper, networkx_graph, slicer)
    beginning = orchestrator.orchestrate()
def large_test():
    revisions = [rev1, rev2, rev3, rev4, rev5]
    # networkx_graph = NetworkxGraph()
    # simple_matcher = SimpleMatcher()
    # slicer = LineSlicing(networkx_graph)
    # gb_obj = gb.GraphBuilder(simple_matcher, networkx_graph, slicer)
    # beginning = gb_obj.build_graph(revisions)
    input_source = StubbedInputSource(revisions)
    mapper = SimpleMapper()
    in_memory_serializer = InMemorySerializer()
    networkx_graph = NetworkxGraph(in_memory_serializer)
    slicer = LineSlicer(networkx_graph)
    orchestrator = Orchestrator(input_source, mapper, networkx_graph, slicer)
    beginning = orchestrator.orchestrate()

    print(beginning[1][1].content)
def test_right_addition():
    rev1 = [
        "a",
        "b",
        "c",
        "d",
        "e",
        "",
        "",
        "",
        "",
        "",
        "fd"
    ]

    rev2 = [
        "a",
        "b",
        "f",
        "c",
        "d",
        "e",
        "",
        "",
        "yz"
    ]
    beginning = None
    revisions = [rev1, rev2]
    input_source = StubbedInputSource(revisions)
    mapper = SimpleMapper()
    in_memory_serializer = InMemorySerializer()
    networkx_graph = NetworkxGraph(in_memory_serializer)
    slicer = LineSlicer(networkx_graph)
    orchestrator = Orchestrator(input_source, mapper, networkx_graph, slicer)
    beginning = orchestrator.orchestrate()

    assert beginning[0][2].label == "a"
    assert beginning[1][2].label == "a"
    assert beginning[1][3].label == "u"
    assert beginning[1][3].content == rev1[2]
    assert beginning[1][4].label == "u"
    assert beginning[1][5].label == "u"
def test_multiple_file_in_memory_deserialization():
    rev1 = ReadTextFromFile("Data/dummy_test_rev1.txt")
    rev2 = ReadTextFromFile("Data/dummy_test_rev2.txt")
    rev3 = ReadTextFromFile("Data/dummy_test_rev3.txt")
    rev4 = ReadTextFromFile("Data/dummy_test_rev4.txt")
    revisions = [rev1, rev2, rev3, rev4]
    input_source = StubbedInputSource(revisions)
    mapper = SimpleMapper()
    in_memory_serializer = InMemorySerializer()
    networkx_graph = NetworkxGraph(in_memory_serializer)
    slicer = LineSlicer(networkx_graph)
    orchestrator = Orchestrator(input_source, mapper, networkx_graph, slicer)
    beginning = orchestrator.orchestrate()
    mappings = in_memory_serializer.deserialize(None)
    assert mapper.get_mapping(1, 1, 1) == mappings[0][1][1]
    assert mapper.get_mapping(2, 2, 1) == mappings[0][2][2]
    assert mapper.get_mapping(7, 7, 1) == mappings[0][7][7]

    assert mapper.get_mapping(1, 1, 2) == mappings[1][1][1]
    assert mapper.get_mapping(5, 4, 2) == mappings[1][5][4]

    assert mapper.get_mapping(1, 1, 3) == mappings[2][1][1]
def test_mutation_of_lines():
    rev1 = [
        "from Framework.graph import Graph",
        "from Framework.graph_builder import GraphBuilder",
        "from Framework.input_source import InputSource",
        "from Framework.mapper import Mapper",
        "from Implementations.Graphs.networkx_graph import NetworkxGraph",
        "self.input_source = input_source",
        "self.mapper = mapper"
    ]

    rev2 = [
        "from Framework.graph import Graph",
        "from Framework.graph_builder import GraphBuilder",
        "from Framework.input_source import InputSource",
        "from Framework.mapper import Mapper",
        "from Implementations.Graphs.networkx_graph import NetworkxGraph",
        "gb_obj = gb.SimpleGraphBuilder(self.mapper, self.graph)",
        "self.mapper = mapper + fake_mapper"
    ]
    beginning = None
    revisions = [rev1, rev2]
    input_source = StubbedInputSource(revisions)
    mapper = SimpleMapper()
    in_memory_serializer = InMemorySerializer()
    networkx_graph = NetworkxGraph(in_memory_serializer)
    slicer = LineSlicer(networkx_graph)
    orchestrator = Orchestrator(input_source, mapper, networkx_graph, slicer)
    beginning = orchestrator.orchestrate()

    assert beginning[1][0].label == "u"
    assert beginning[1][1].label == "u"
    assert beginning[1][2].label == "u"
    assert beginning[1][3].label == "u"
    assert beginning[1][4].label == "u"
    assert beginning[1][6].label == "c"