def testExtractCodeWithEmptyDiffBetweenTwoCommits(self):
        gp = gitprovider.GitProvider(config.getRepoDir())
        commits = gp.getAllVersions('trainDbScriptTest')
        commit1 = commits[-2]
        commit2 = commits[-2]
        file1 = gp.getFileContents('bugcode2.cpp', commit1)
        file2 = gp.getFileContents('bugcode2.cpp', commit2)
        diff = LinuxDiffer().diff(file1, file2)
        usedDiffs = []
        bugData = self.getBugData()
        extractor = CodeExtractor(bugData)
        extractor.loadCodeFromText(file1, '\r\n', '\n')
        extractor.extractBugCode()
        extractor.loadDiff(diff)
        with self.assertRaises(ValueError):
            extractor.extractFixCode()
        bugCode = extractor.getBugCodeFragment()
        fixCode = extractor.getFixCodeFragment()
        usedDiffs = extractor.getUsedDiffs()
        expectedOutputFix = ''
        expectedOutputBug = """int main(void)
{
    int a;
    a = 3;
    a = 0;
    if (a == 0)
    {
"""
        self.assertEqual(expectedOutputBug, bugCode)
        self.assertEqual(expectedOutputFix, fixCode)
        self.assertEqual(0, len(usedDiffs))
 def testCheckout(self):
     gp = gitprovider.GitProvider(config.getRepoDir())
     gp.checkout('e46f62cbdcd7447dc6c796d917fece54426c782f'
                 )  #'bde8d75eb1133703b93a5110ed01c635d6d886ac')
     #self.assertEqual(3, len(gp.getTree().blobs))
     self.assertEqual(2, len(gp.getTree().blobs))
     gp.checkout('955fa1826edfc9a0936201675029492669a3ec81'
                 )  #'52a7d8e413686e54d23dbf002f68f6c9baeaa313')
     #self.assertEqual(4, len(gp.getTree().blobs))
     self.assertEqual(3, len(gp.getTree().blobs))
    def testDiffBetweenTwoCommits(self):
        gp = gitprovider.GitProvider(config.getRepoDir())
        commits = gp.getAllVersions('trainDbScriptTest')
        commit1 = commits[-2]
        commit2 = commits[-3]
        file1 = gp.getFileContents('bugcode2.cpp', commit1)
        file2 = gp.getFileContents('bugcode2.cpp', commit2)
        diff = LinuxDiffer().diff(file1, file2)
        expectedOutput = """8d7
<     a = 3;"""
        self.assertEqual(expectedOutput, diff)
    def testFileContents(self):
        gp = gitprovider.GitProvider(config.getRepoDir())
        contents = gp.getFileContents(
            'bugcode2.cpp', 'bbe7c95cbbbe1ce8871a5e1fad674ee245e52314'
        )  #'3242a5e8d56da17553feee2b61fa424963148c82')
        expectedContent = """#include <iostream>

using namespace std;

int main(void)
{
    int a;
    a = 3;
    a = 0;
    if (a == 0)
    {
        int b = 1 / a;
        cout << b << endl;
    }
    return 0;
}"""
        self.assertEqual(expectedContent.split('\n'), contents.split('\r\n'))
        contents = gp.getFileContents(
            'bugcode2.cpp', 'c1b5543440eb2e671018736d79f9a8a4e96f4855'
        )  #'f9aac9d2cb840744f64ce8882fd4202884139680')
        expectedContent = """#include <iostream>

using namespace std;

int main(void)
{
    int a;
    a = 0;
    if (a == 0)
    {
        int b = 1 / a;
        cout << b << endl;
    }
    return 0;
}"""
        self.assertEqual(expectedContent.split('\n'), contents.split('\r\n'))
    def testExtractCodeWithDiffBetweenTwoCommitsMultiDiffInFragment(self):
        gp = gitprovider.GitProvider(config.getRepoDir())
        commits = gp.getAllVersions('trainDbScriptTest')
        commit1 = commits[-6]
        commit2 = commits[-7]
        file1 = gp.getFileContents('bugcode3.cpp', commit1)
        file2 = gp.getFileContents('bugcode3.cpp', commit2)
        diff = LinuxDiffer().diff(file1, file2)
        usedDiffs = []
        bugData = self.getBugData3()
        extractor = CodeExtractor(bugData)
        extractor.loadCodeFromText(file1, '\r\n', '\n')
        extractor.extractBugCode()
        extractor.loadDiff(diff)
        extractor.extractFixCode()
        bugCode = extractor.getBugCodeFragment()
        fixCode = extractor.getFixCodeFragment()
        usedDiffs = extractor.getUsedDiffs()
        expectedOutputFix = """{;
    int a;
    a = 0;
    a = 2;
    if (a != 0)
    {;
        int b = 1 / a;
"""
        expectedOutputBug = """{
    int a;
    a = 0;
    a = 2;
    if (a != 0)
    {
        int b = 1 / a;
"""
        self.assertEqual(expectedOutputBug, bugCode)
        self.assertEqual(expectedOutputFix, fixCode)
        self.assertEqual(2, len(usedDiffs))
 def tearDownClass(self):
     gp = gitprovider.GitProvider(config.getRepoDir())
     gp.checkout('master')
 def testGetFileContentsNotExistingCommitFailure(self):
     gp = gitprovider.GitProvider(config.getRepoDir())
     with self.assertRaises(ValueError):
         gp.getFileContents('bugcode.cpp',
                            '0000000000000000000000000000000000000002')
 def testGetFileContentsNotExistingFileFailure(self):
     gp = gitprovider.GitProvider(config.getRepoDir())
     with self.assertRaises(KeyError):
         gp.getFileContents('bugcode2.cpp',
                            'e46f62cbdcd7447dc6c796d917fece54426c782f'
                            )  #'bde8d75eb1133703b93a5110ed01c635d6d886ac')
 def testLoadRootCommit(self):
     gp = gitprovider.GitProvider(config.getRepoDir())
     commits = gp.getAllVersions(config.getBranch())
     self.assertEqual(
         'e46f62cbdcd7447dc6c796d917fece54426c782f', commits[-1]
     )  #'bde8d75eb1133703b93a5110ed01c635d6d886ac', commits[-1])
 def testCheckoutNonExistingCommitFailure(self):
     gp = gitprovider.GitProvider(config.getRepoDir())
     with self.assertRaises(ValueError):
         gp.checkout('0000000000000000000000000000000000000002')