| #!/usr/bin/python |
| |
| import os, unittest, StringIO |
| |
| import common |
| from autotest_lib.client.common_lib import utils |
| from autotest_lib.client.common_lib.test_utils import mock |
| |
| |
| class test_read_one_line(unittest.TestCase): |
| def setUp(self): |
| self.god = mock.mock_god() |
| self.god.stub_function(utils, "open") |
| |
| |
| def tearDown(self): |
| self.god.unstub_all() |
| |
| |
| def create_test_file(self, contents): |
| test_file = StringIO.StringIO(contents) |
| utils.open.expect_call("filename", "r").and_return(test_file) |
| |
| |
| def test_reads_one_line_file(self): |
| self.create_test_file("abc\n") |
| self.assertEqual("abc", utils.read_one_line("filename")) |
| self.god.check_playback() |
| |
| |
| def test_strips_read_lines(self): |
| self.create_test_file("abc \n") |
| self.assertEqual("abc ", utils.read_one_line("filename")) |
| self.god.check_playback() |
| |
| |
| def test_drops_extra_lines(self): |
| self.create_test_file("line 1\nline 2\nline 3\n") |
| self.assertEqual("line 1", utils.read_one_line("filename")) |
| self.god.check_playback() |
| |
| |
| def test_works_on_empty_file(self): |
| self.create_test_file("") |
| self.assertEqual("", utils.read_one_line("filename")) |
| self.god.check_playback() |
| |
| |
| def test_works_on_file_with_no_newlines(self): |
| self.create_test_file("line but no newline") |
| self.assertEqual("line but no newline", |
| utils.read_one_line("filename")) |
| self.god.check_playback() |
| |
| |
| def test_preserves_leading_whitespace(self): |
| self.create_test_file(" has leading whitespace") |
| self.assertEqual(" has leading whitespace", |
| utils.read_one_line("filename")) |
| |
| |
| class test_write_one_line(unittest.TestCase): |
| def setUp(self): |
| self.god = mock.mock_god() |
| self.god.stub_function(utils, "open") |
| |
| |
| def tearDown(self): |
| self.god.unstub_all() |
| |
| |
| def get_write_one_line_output(self, content): |
| test_file = StringIO.StringIO(content) |
| utils.open.expect_call("filename", "w").and_return(test_file) |
| utils.write_one_line("filename", content) |
| self.god.check_playback() |
| return test_file.getvalue() |
| |
| |
| def test_writes_one_line_file(self): |
| self.assertEqual("abc\n", self.get_write_one_line_output("abc")) |
| |
| |
| def test_preserves_existing_newline(self): |
| self.assertEqual("abc\n", self.get_write_one_line_output("abc\n")) |
| |
| |
| def test_preserves_leading_whitespace(self): |
| self.assertEqual(" abc\n", self.get_write_one_line_output(" abc")) |
| |
| |
| def test_preserves_trailing_whitespace(self): |
| self.assertEqual("abc \n", self.get_write_one_line_output("abc ")) |
| |
| |
| def test_handles_empty_input(self): |
| self.assertEqual("\n", self.get_write_one_line_output("")) |
| |
| |
| class test_read_keyval(unittest.TestCase): |
| def setUp(self): |
| self.god = mock.mock_god() |
| self.god.stub_function(utils, "open") |
| self.god.stub_function(os.path, "isdir") |
| |
| |
| def tearDown(self): |
| self.god.unstub_all() |
| |
| |
| def create_test_file(self, filename, contents): |
| test_file = StringIO.StringIO(contents) |
| utils.open.expect_call(filename).and_return(test_file) |
| |
| |
| def read_keyval(self, contents): |
| os.path.isdir.expect_call("file").and_return(False) |
| self.create_test_file("file", contents) |
| keyval = utils.read_keyval("file") |
| self.god.check_playback() |
| return keyval |
| |
| |
| def test_accesses_files_directly(self): |
| os.path.isdir.expect_call("file").and_return(False) |
| self.create_test_file("file", "") |
| utils.read_keyval("file") |
| self.god.check_playback() |
| |
| |
| def test_accesses_directories_through_keyval_file(self): |
| os.path.isdir.expect_call("dir").and_return(True) |
| self.create_test_file("dir/keyval", "") |
| utils.read_keyval("dir") |
| self.god.check_playback() |
| |
| |
| def test_values_are_rstripped(self): |
| keyval = self.read_keyval("a=b \n") |
| self.assertEquals(keyval, {"a": "b"}) |
| |
| |
| def test_comments_are_ignored(self): |
| keyval = self.read_keyval("a=b # a comment\n") |
| self.assertEquals(keyval, {"a": "b"}) |
| |
| |
| def test_integers_become_ints(self): |
| keyval = self.read_keyval("a=1\n") |
| self.assertEquals(keyval, {"a": 1}) |
| self.assertEquals(int, type(keyval["a"])) |
| |
| |
| def test_float_values_become_floats(self): |
| keyval = self.read_keyval("a=1.5\n") |
| self.assertEquals(keyval, {"a": 1.5}) |
| self.assertEquals(float, type(keyval["a"])) |
| |
| |
| def test_multiple_lines(self): |
| keyval = self.read_keyval("a=one\nb=two\n") |
| self.assertEquals(keyval, {"a": "one", "b": "two"}) |
| |
| |
| def test_the_last_duplicate_line_is_used(self): |
| keyval = self.read_keyval("a=one\nb=two\na=three\n") |
| self.assertEquals(keyval, {"a": "three", "b": "two"}) |
| |
| |
| def test_extra_equals_are_included_in_values(self): |
| keyval = self.read_keyval("a=b=c\n") |
| self.assertEquals(keyval, {"a": "b=c"}) |
| |
| |
| def test_non_alphanumeric_keynames_are_rejected(self): |
| self.assertRaises(ValueError, self.read_keyval, "a$=one\n") |
| |
| |
| def test_underscores_are_allowed_in_key_names(self): |
| keyval = self.read_keyval("a_b=value\n") |
| self.assertEquals(keyval, {"a_b": "value"}) |
| |
| |
| def test_dashes_are_allowed_in_key_names(self): |
| keyval = self.read_keyval("a-b=value\n") |
| self.assertEquals(keyval, {"a-b": "value"}) |
| |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |