Mercurial > bitten > bitten-test
diff bitten/slave_tests/recipe.py @ 616:dd64ca07ecae
Move tests that can be run with only the slave modules present to a separate `slave_tests` package
author | dfraser |
---|---|
date | Wed, 05 Aug 2009 09:34:04 +0000 |
parents | |
children | 05686657e989 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/bitten/slave_tests/recipe.py @@ -0,0 +1,129 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2005-2007 Christopher Lenz <cmlenz@gmx.de> +# Copyright (C) 2007 Edgewall Software +# All rights reserved. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at http://bitten.edgewall.org/wiki/License. + +import os +import shutil +import tempfile +import unittest + +from bitten.build.config import Configuration +from bitten.recipe import Context, Recipe, InvalidRecipeError +from bitten.util import xmlio + + +class ContextTestCase(unittest.TestCase): + + def setUp(self): + self.basedir = os.path.realpath(tempfile.mkdtemp()) + + def tearDown(self): + shutil.rmtree(self.basedir) + + def test_vars_basedir(self): + config = Configuration(properties={'foo.bar': 'baz'}) + ctxt = Context('%s/${path}/${foo.bar}' % os.path.realpath('/foo'), + config, {'path': 'bar'}) + + self.assertEquals(os.path.realpath('/foo/bar/baz'), + ctxt.vars['basedir']) + + +class RecipeTestCase(unittest.TestCase): + + def setUp(self): + self.basedir = os.path.realpath(tempfile.mkdtemp()) + + def tearDown(self): + shutil.rmtree(self.basedir) + + def test_empty_recipe(self): + xml = xmlio.parse('<build/>') + recipe = Recipe(xml, basedir=self.basedir) + self.assertEqual(self.basedir, recipe.ctxt.basedir) + steps = list(recipe) + self.assertEqual(0, len(steps)) + + def test_empty_step(self): + xml = xmlio.parse('<build>' + ' <step id="foo" description="Bar"></step>' + '</build>') + recipe = Recipe(xml, basedir=self.basedir) + steps = list(recipe) + self.assertEqual(1, len(steps)) + self.assertEqual('foo', steps[0].id) + self.assertEqual('Bar', steps[0].description) + self.assertEqual('fail', steps[0].onerror) + + def test_validate_bad_root(self): + xml = xmlio.parse('<foo></foo>') + recipe = Recipe(xml, basedir=self.basedir) + self.assertRaises(InvalidRecipeError, recipe.validate) + + def test_validate_no_steps(self): + xml = xmlio.parse('<build></build>') + recipe = Recipe(xml, basedir=self.basedir) + self.assertRaises(InvalidRecipeError, recipe.validate) + + def test_validate_child_not_step(self): + xml = xmlio.parse('<build><foo/></build>') + recipe = Recipe(xml, basedir=self.basedir) + self.assertRaises(InvalidRecipeError, recipe.validate) + + def test_validate_child_not_step(self): + xml = xmlio.parse('<build><foo/></build>') + recipe = Recipe(xml, basedir=self.basedir) + self.assertRaises(InvalidRecipeError, recipe.validate) + + def test_validate_step_without_id(self): + xml = xmlio.parse('<build><step><cmd/></step></build>') + recipe = Recipe(xml, basedir=self.basedir) + self.assertRaises(InvalidRecipeError, recipe.validate) + + def test_validate_step_with_empty_id(self): + xml = xmlio.parse('<build><step id=""><cmd/></step></build>') + recipe = Recipe(xml, basedir=self.basedir) + self.assertRaises(InvalidRecipeError, recipe.validate) + + def test_validate_step_without_commands(self): + xml = xmlio.parse('<build><step id="test"/></build>') + recipe = Recipe(xml, basedir=self.basedir) + self.assertRaises(InvalidRecipeError, recipe.validate) + + def test_validate_step_with_command_children(self): + xml = xmlio.parse('<build><step id="test">' + '<somecmd><child1/><child2/></somecmd>' + '</step></build>') + recipe = Recipe(xml, basedir=self.basedir) + self.assertRaises(InvalidRecipeError, recipe.validate) + + def test_validate_step_with_duplicate_id(self): + xml = xmlio.parse('<build>' + '<step id="test"><somecmd></somecmd></step>' + '<step id="test"><othercmd></othercmd></step>' + '</build>') + recipe = Recipe(xml, basedir=self.basedir) + self.assertRaises(InvalidRecipeError, recipe.validate) + + def test_validate_successful(self): + xml = xmlio.parse('<build>' + '<step id="foo"><somecmd></somecmd></step>' + '<step id="bar"><othercmd></othercmd></step>' + '</build>') + recipe = Recipe(xml, basedir=self.basedir) + recipe.validate() + +def suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(ContextTestCase, 'test')) + suite.addTest(unittest.makeSuite(RecipeTestCase, 'test')) + return suite + +if __name__ == '__main__': + unittest.main(defaultTest='suite')