Exemple #1
0
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)