diff --git a/test/ganeti.cli_unittest.py b/test/ganeti.cli_unittest.py index 5fb652eb4a89fdc436713aee4797d2dd58749ce6..b768f4a03b091d5bcf795d9aded0369da8965c2f 100755 --- a/test/ganeti.cli_unittest.py +++ b/test/ganeti.cli_unittest.py @@ -124,5 +124,127 @@ class TestToStream(unittest.TestCase): cli._ToStream(buf, "foo %s %s", "a", "b") self.failUnlessEqual(buf.getvalue(), "foo a b\n") + +class TestGenerateTable(unittest.TestCase): + HEADERS = dict([("f%s" % i, "Field%s" % i) for i in range(5)]) + + FIELDS1 = ["f1", "f2"] + DATA1 = [ + ["abc", 1234], + ["foobar", 56], + ["b", -14], + ] + + def _test(self, headers, fields, separator, data, + numfields, unitfields, units, expected): + table = cli.GenerateTable(headers, fields, separator, data, + numfields=numfields, unitfields=unitfields, + units=units) + self.assertEqual(table, expected) + + def testPlain(self): + exp = [ + "Field1 Field2", + "abc 1234", + "foobar 56", + "b -14", + ] + self._test(self.HEADERS, self.FIELDS1, None, self.DATA1, + None, None, "m", exp) + + def testNoFields(self): + self._test(self.HEADERS, [], None, [[], []], + None, None, "m", ["", "", ""]) + self._test(None, [], None, [[], []], + None, None, "m", ["", ""]) + + def testSeparator(self): + for sep in ["#", ":", ",", "^", "!", "%", "|", "###", "%%", "!!!", "||"]: + exp = [ + "Field1%sField2" % sep, + "abc%s1234" % sep, + "foobar%s56" % sep, + "b%s-14" % sep, + ] + self._test(self.HEADERS, self.FIELDS1, sep, self.DATA1, + None, None, "m", exp) + + def testNoHeader(self): + exp = [ + "abc 1234", + "foobar 56", + "b -14", + ] + self._test(None, self.FIELDS1, None, self.DATA1, + None, None, "m", exp) + + def testUnknownField(self): + headers = { + "f1": "Field1", + } + exp = [ + "Field1 UNKNOWN", + "abc 1234", + "foobar 56", + "b -14", + ] + self._test(headers, ["f1", "UNKNOWN"], None, self.DATA1, + None, None, "m", exp) + + def testNumfields(self): + fields = ["f1", "f2", "f3"] + data = [ + ["abc", 1234, 0], + ["foobar", 56, 3], + ["b", -14, "-"], + ] + exp = [ + "Field1 Field2 Field3", + "abc 1234 0", + "foobar 56 3", + "b -14 -", + ] + self._test(self.HEADERS, fields, None, data, + ["f2", "f3"], None, "m", exp) + + def testUnitfields(self): + expnosep = [ + "Field1 Field2 Field3", + "abc 1234 0M", + "foobar 56 3M", + "b -14 -", + ] + + expsep = [ + "Field1:Field2:Field3", + "abc:1234:0M", + "foobar:56:3M", + "b:-14:-", + ] + + for sep, expected in [(None, expnosep), (":", expsep)]: + fields = ["f1", "f2", "f3"] + data = [ + ["abc", 1234, 0], + ["foobar", 56, 3], + ["b", -14, "-"], + ] + self._test(self.HEADERS, fields, sep, data, + ["f2", "f3"], ["f3"], "h", expected) + + def testUnusual(self): + data = [ + ["%", "xyz"], + ["%%", "abc"], + ] + exp = [ + "Field1 Field2", + "% xyz", + "%% abc", + ] + self._test(self.HEADERS, ["f1", "f2"], None, data, + None, None, "m", exp) + + if __name__ == '__main__': testutils.GanetiTestProgram()