class ContextImplTest(unittest.TestCase): def setUp(self): self.dir = _MockGlobbingVirtualDirectory() self.dir.add("src/foo/bar.sebs", 0, """ mock_rule = sebs.Rule() return_context = mock_rule.context mock_test = sebs.Test() """) self.loader = Loader(self.dir) self.file = self.loader.load("foo/bar.sebs") self.context = self.file.return_context def testBasics(self): self.assertEqual("foo/bar.sebs", self.context.filename) self.assertEqual("src/foo/bar.sebs", self.context.full_filename) def testRules(self): self.assertTrue(isinstance(self.file.mock_rule, Rule)) self.assertTrue(isinstance(self.file.mock_test, Test)) self.assertTrue(self.file.mock_test.context is self.context) def testSourceArtifact(self): artifact1 = self.context.source_artifact("qux") artifact2 = self.context.source_artifact("corge") self.assertTrue(artifact1 is self.context.source_artifact("qux")) self.assertEqual("src/foo/qux", artifact1.filename) self.assertTrue(artifact1.action is None) self.assertFalse(artifact2 is artifact1) self.assertTrue(self.context.source_artifact(artifact1) is artifact1) self.assertEqual("qux", self.context.local_filename(artifact1)) self.assertEqual("corge", self.context.local_filename(artifact2)) self.assertEqual("qux", self.context.local_filename("qux")) self.assertEqual("corge", self.context.local_filename("corge")) # Trying to create an artifact outside the directory fails. self.assertRaises(DefinitionError, self.context.source_artifact, "../parent") self.assertEqual([artifact1], self.context.source_artifact_list(["qux"])) self.assertEqual([artifact2], self.context.source_artifact_list(["corge"])) self.assertEqual(set([artifact1, artifact2]), set(self.context.source_artifact_list(["*"]))) def testAction(self): artifact = self.loader.source_artifact("blah") action = self.context.action(self.file.mock_rule, "run", "foo") self.assertEqual("run", action.verb) self.assertEqual("foo", action.name) action2 = self.context.action(self.file.mock_rule) self.assertEqual("run", action.verb) self.assertEqual("foo", action.name) self.assertEqual("build", action2.verb) self.assertEqual("foo/bar.sebs:mock_rule", action2.name) def testDerivedArtifact(self): action = self.context.action(self.file.mock_rule) tmp_artifact = self.context.intermediate_artifact("grault", action) self.assertEqual("tmp/foo/grault", tmp_artifact.filename) self.assertTrue(tmp_artifact.action is action) self.assertEqual("grault", self.context.local_filename(tmp_artifact)) mem_artifact = self.context.memory_artifact("plugh", action) self.assertEqual("mem/foo/plugh", mem_artifact.filename) self.assertTrue(mem_artifact.action is action) self.assertEqual("plugh", self.context.local_filename(mem_artifact)) bin_artifact = self.context.output_artifact("bin", "garply", action) self.assertEqual("bin/garply", bin_artifact.filename) self.assertTrue(bin_artifact.action is action) self.assertTrue(self.context.local_filename(bin_artifact) is None) # Creating the same temporary artifact twice fails. self.assertRaises(DefinitionError, self.context.intermediate_artifact, "grault", action) self.assertRaises(DefinitionError, self.context.memory_artifact, "plugh", action) # Trying to create an artifact outside the directory fails. self.assertRaises(DefinitionError, self.context.intermediate_artifact, "../parent", action) self.assertRaises(DefinitionError, self.context.intermediate_artifact, "/root", action) self.assertRaises(DefinitionError, self.context.memory_artifact, "../parent", action) self.assertRaises(DefinitionError, self.context.memory_artifact, "/root", action) # Creating the same output artifact twice fails. self.assertRaises(DefinitionError, self.context.output_artifact, "bin", "garply", action) # Only certain directories are allowable for output artifact.s self.assertRaises(DefinitionError, self.context.output_artifact, "baddir", "waldo", action)