"""Tests for Coverage's api.""" import os, sys, textwrap from cStringIO import StringIO import coverage from coveragetest import CoverageTest class ApiTest(CoverageTest): def testSimple(self): coverage.erase() self.makeFile("mycode", """\ a = 1 b = 2 if b == 3: c = 4 d = 5 """) # Import the python file, executing it. coverage.start() self.importModule("mycode") coverage.stop() _, statements, missing, missingtext = coverage.analysis("mycode.py") self.assertEqual(statements, [1,2,3,4,5]) self.assertEqual(missing, [4]) self.assertEqual(missingtext, "4") def doReportWork(self, modname): coverage.erase() self.makeFile(modname, """\ a = 1 b = 2 if b == 3: c = 4 d = 5 e = 6 f = 7 """) # Import the python file, executing it. coverage.start() self.importModule(modname) coverage.stop() coverage.analysis(modname + ".py") def testReport(self): self.doReportWork("mycode2") coverage.report(["mycode2.py"]) self.assertEqual(self.stdout(), textwrap.dedent("""\ Name Stmts Exec Cover Missing --------------------------------------- mycode2 7 4 57% 4-6 """)) def testReportFile(self): self.doReportWork("mycode3") fout = StringIO() coverage.report(["mycode3.py"], file=fout) self.assertEqual(self.stdout(), "") self.assertEqual(fout.getvalue(), textwrap.dedent("""\ Name Stmts Exec Cover Missing --------------------------------------- mycode3 7 4 57% 4-6 """)) def testUnexecutedFile(self): cov = coverage.coverage() self.makeFile("mycode", """\ a = 1 b = 2 if b == 3: c = 4 d = 5 """) self.makeFile("not_run", """\ fooey = 17 """) # Import the python file, executing it. cov.start() self.importModule("mycode") cov.stop() _, statements, missing, _ = cov.analysis("not_run.py") self.assertEqual(statements, [1]) self.assertEqual(missing, [1]) def testFileNames(self): self.makeFile("mymain", """\ import mymod a = 1 """) self.makeFile("mymod", """\ fooey = 17 """) # Import the python file, executing it. cov = coverage.coverage() cov.start() self.importModule("mymain") cov.stop() filename, _, _, _ = cov.analysis("mymain.py") self.assertEqual(os.path.basename(filename), "mymain.py") filename, _, _, _ = cov.analysis("mymod.py") self.assertEqual(os.path.basename(filename), "mymod.py") filename, _, _, _ = cov.analysis(sys.modules["mymain"]) self.assertEqual(os.path.basename(filename), "mymain.py") filename, _, _, _ = cov.analysis(sys.modules["mymod"]) self.assertEqual(os.path.basename(filename), "mymod.py") # Import the python file, executing it again, once it's been compiled # already. cov = coverage.coverage() cov.start() self.importModule("mymain") cov.stop() filename, _, _, _ = cov.analysis("mymain.py") self.assertEqual(os.path.basename(filename), "mymain.py") filename, _, _, _ = cov.analysis("mymod.py") self.assertEqual(os.path.basename(filename), "mymod.py") filename, _, _, _ = cov.analysis(sys.modules["mymain"]) self.assertEqual(os.path.basename(filename), "mymain.py") filename, _, _, _ = cov.analysis(sys.modules["mymod"]) self.assertEqual(os.path.basename(filename), "mymod.py") def testIgnoreStdLib(self): self.makeFile("mymain", """\ import mymod, colorsys a = 1 hls = colorsys.rgb_to_hls(1.0, 0.5, 0.0) """) self.makeFile("mymod", """\ fooey = 17 """) # Measure without the stdlib. cov1 = coverage.coverage() self.assertEqual(cov1.cover_stdlib, False) cov1.start() self.importModule("mymain") cov1.stop() # some statements were marked executed in mymain.py _, statements, missing, _ = cov1.analysis("mymain.py") self.assertNotEqual(statements, missing) # but none were in colorsys.py _, statements, missing, _ = cov1.analysis("colorsys.py") self.assertEqual(statements, missing) # Measure with the stdlib. cov2 = coverage.coverage(cover_stdlib=True) cov2.start() self.importModule("mymain") cov2.stop() # some statements were marked executed in mymain.py _, statements, missing, _ = cov2.analysis("mymain.py") self.assertNotEqual(statements, missing) # and some were marked executed in colorsys.py _, statements, missing, _ = cov2.analysis("colorsys.py") self.assertNotEqual(statements, missing)