def testEnvironmentCommand(self): dir = VirtualDirectory() bar = Artifact("env/BAR", None) bar_set = Artifact("env/set/BAR", None) output = Artifact("foo", None) command = EnvironmentCommand(MockRuleContext(bar, bar_set), "BAR", output) enumerator = MockArtifactEnumerator({bar_set: "false"}) command.enumerate_artifacts(enumerator) self.assertEquals([bar_set], enumerator.reads) self.assertEquals([], enumerator.inputs) self.assertEquals([output], enumerator.outputs) enumerator = MockArtifactEnumerator({bar_set: "true"}) command.enumerate_artifacts(enumerator) self.assertEquals([bar_set], enumerator.reads) self.assertEquals([bar], enumerator.inputs) self.assertEquals([output], enumerator.outputs) context = MockCommandContext(dir) dir.write("env/set/BAR", "false") log = cStringIO.StringIO() self.assertFalse(command.run(context, log)) self.assertFalse(dir.exists("foo")) self.assertEquals("Environment variable not set: BAR\n", log.getvalue()) dir.write("env/set/BAR", "true") dir.write("env/BAR", "baz") log = cStringIO.StringIO() self.assertTrue(command.run(context, log)) self.assertEquals("baz", dir.read("foo")) self.assertEquals("", log.getvalue()) self.assertEquals("echo $BAR > foo\n", _print_command(command))
def testEnvironmentCommandWithDefault(self): bar = Artifact("env/BAR", None) bar_set = Artifact("env/set/BAR", None) default = Artifact("default", None) output = Artifact("foo", None) command = EnvironmentCommand(MockRuleContext(bar, bar_set), "BAR", output, default) enumerator = MockArtifactEnumerator({bar_set: "false"}) command.enumerate_artifacts(enumerator) self.assertEquals([bar_set], enumerator.reads) self.assertEquals([default], enumerator.inputs) self.assertEquals([output], enumerator.outputs) enumerator = MockArtifactEnumerator({bar_set: "true"}) command.enumerate_artifacts(enumerator) self.assertEquals([bar_set], enumerator.reads) self.assertEquals([bar], enumerator.inputs) self.assertEquals([output], enumerator.outputs) dir = VirtualDirectory() dir.write("env/set/BAR", "true") dir.write("env/BAR", "baz") context = MockCommandContext(dir) log = cStringIO.StringIO() self.assertTrue(command.run(context, log)) self.assertEquals("baz", dir.read("foo")) self.assertEquals("", log.getvalue()) dir = VirtualDirectory() dir.write("env/set/BAR", "false") dir.write("default", "qux") context = MockCommandContext(dir) log = cStringIO.StringIO() self.assertTrue(command.run(context, log)) self.assertEquals("qux", dir.read("foo")) self.assertEquals("", log.getvalue()) self.assertEquals("echo ${BAR:$(default)} > foo\n", _print_command(command))