import testbase
import unittest
import parse_cobertura

class accumulate_data(testbase.KcovTestCase):
    def runTest(self):
        self.setUp()
        rv,o = self.do(testbase.kcov + " " + testbase.outbase + "/kcov " + testbase.sources + "/tests/python/main")

        dom = parse_cobertura.parseFile(testbase.outbase + "/kcov/main/cobertura.xml")
        assert parse_cobertura.hitsPerLine(dom, "main", 16) == 1
        assert parse_cobertura.hitsPerLine(dom, "main", 19) == 0
        assert parse_cobertura.hitsPerLine(dom, "main", 14) == 1

        rv,o = self.do(testbase.kcov + " "+ testbase.outbase + "/kcov " + testbase.sources + "/tests/python/main 5")
        dom = parse_cobertura.parseFile(testbase.outbase + "/kcov/main/cobertura.xml")
        assert parse_cobertura.hitsPerLine(dom, "main", 16) == 1
        assert parse_cobertura.hitsPerLine(dom, "main", 19) == 1
        assert parse_cobertura.hitsPerLine(dom, "main", 14) == 2

class dont_accumulate_data_with_clean(testbase.KcovTestCase):
    def runTest(self):
        self.setUp()
        rv,o = self.do(testbase.kcov + " " + testbase.outbase + "/kcov " + testbase.sources + "/tests/python/main")

        dom = parse_cobertura.parseFile(testbase.outbase + "/kcov/main/cobertura.xml")
        assert parse_cobertura.hitsPerLine(dom, "main", 16) == 1
        assert parse_cobertura.hitsPerLine(dom, "main", 19) == 0
        assert parse_cobertura.hitsPerLine(dom, "main", 14) == 1

        rv,o = self.do(testbase.kcov + " --clean "+ testbase.outbase + "/kcov " + testbase.sources + "/tests/python/main 5")
        dom = parse_cobertura.parseFile(testbase.outbase + "/kcov/main/cobertura.xml")
        assert parse_cobertura.hitsPerLine(dom, "main", 16) == 0
        assert parse_cobertura.hitsPerLine(dom, "main", 19) == 1
        assert parse_cobertura.hitsPerLine(dom, "main", 14) == 1

class merge_basic(testbase.KcovTestCase):
    def runTest(self):
        self.setUp()
        rv,o = self.do(testbase.kcov + " " + testbase.outbase + "/kcov " + testbase.sources + "/tests/python/main 5")
        rv,o = self.do(testbase.kcov + " " + testbase.outbase + "/kcov " + testbase.sources + "/tests/bash/shell-main")

        dom = parse_cobertura.parseFile(testbase.outbase + "/kcov/kcov-merged/cobertura.xml")
        assert parse_cobertura.hitsPerLine(dom, "main", 10) == 1
        assert parse_cobertura.hitsPerLine(dom, "shell-main", 4) == 1

class merge_multiple_output_directories(testbase.KcovTestCase):
    def runTest(self):
        self.setUp()
        rv,o = self.do(testbase.kcov + " " + testbase.outbase + "/kcov/first " + testbase.sources + "/tests/python/main 5")
        rv,o = self.do(testbase.kcov + " " + testbase.outbase + "/kcov/second " + testbase.sources + "/tests/bash/shell-main")
        rv,o = self.do(testbase.kcov + " --merge " + testbase.outbase + "/kcov/merged " + testbase.outbase + "/kcov/first " + testbase.outbase + "/kcov/second")
        dom = parse_cobertura.parseFile(testbase.outbase + "/kcov/merged/kcov-merged/cobertura.xml")
        assert parse_cobertura.hitsPerLine(dom, "main", 10) == 1
        assert parse_cobertura.hitsPerLine(dom, "shell-main", 4) == 1

class merge_merged_output(testbase.KcovTestCase):
    def runTest(self):
        self.setUp()
        rv,o = self.do(testbase.kcov + " " + testbase.outbase + "/kcov/first " + testbase.sources + "/tests/python/main 5")
        rv,o = self.do(testbase.kcov + " " + testbase.outbase + "/kcov/second " + testbase.sources + "/tests/bash/shell-main")
        rv,o = self.do(testbase.kcov + " " + testbase.outbase + "/kcov/third " + testbase.sources + "/tests/bash/dollar-var-replacements.sh")

        rv,o = self.do(testbase.kcov + " --merge " + testbase.outbase + "/kcov/merged " + testbase.outbase + "/kcov/first " + testbase.outbase + "/kcov/second")
        rv,o = self.do(testbase.kcov + " --merge " + testbase.outbase + "/kcov/merged2 " + testbase.outbase + "/kcov/merged " + testbase.outbase + "/kcov/third")
        dom = parse_cobertura.parseFile(testbase.outbase + "/kcov/merged2/kcov-merged/cobertura.xml")
        assert parse_cobertura.hitsPerLine(dom, "main", 10) == 1
        assert parse_cobertura.hitsPerLine(dom, "shell-main", 4) == 1
        assert parse_cobertura.hitsPerLine(dom, "dollar-var-replacements.sh", 2) == 1

class merge_coveralls(testbase.KcovTestCase):
    def runTest(self):
        self.setUp()
        rv,o = self.do(testbase.kcov + " --coveralls-id=dry-run " + testbase.outbase + "/kcov/ " + testbase.sources + "/tests/python/main 5")
        rv,o = self.do(testbase.kcov + " --coveralls-id=dry-run " + testbase.outbase + "/kcov/ " + testbase.sources + "/tests/bash/shell-main")

        rv,o = self.doShell("grep second.py %s/kcov/main/coveralls.out" % (testbase.outbase))
        assert rv == 0
        rv,o = self.doShell("grep shell-main %s/kcov/shell-main/coveralls.out" % (testbase.outbase))
        assert rv == 0
