import sys import unittest from html5lib.filters.formfiller import SimpleFilter class FieldStorage(dict): def getlist(self, name): l = self[name] if isinstance(l, list): return l elif isinstance(l, tuple) or hasattr(l, '__iter__'): return list(l) return [l] class TestCase(unittest.TestCase): def runTest(self, input, formdata, expected): try: output = list(SimpleFilter(input, formdata)) except NotImplementedError, nie: # Amnesty for those that confess... print >>sys.stderr, "Not implemented:", str(nie) else: errorMsg = "\n".join(["\n\nInput:", str(input), "\nForm data:", str(formdata), "\nExpected:", str(expected), "\nReceived:", str(output)]) self.assertEquals(output, expected, errorMsg) def testSingleTextInputWithValue(self): self.runTest( [{"type": u"EmptyTag", "name": u"input", "data": [(u"type", u"text"), (u"name", u"foo"), (u"value", u"quux")]}], FieldStorage({"foo": "bar"}), [{"type": u"EmptyTag", "name": u"input", "data": [(u"type", u"text"), (u"name", u"foo"), (u"value", u"bar")]}]) def testSingleTextInputWithoutValue(self): self.runTest( [{"type": u"EmptyTag", "name": u"input", "data": [(u"type", u"text"), (u"name", u"foo")]}], FieldStorage({"foo": "bar"}), [{"type": u"EmptyTag", "name": u"input", "data": [(u"type", u"text"), (u"name", u"foo"), (u"value", u"bar")]}]) def testSingleCheckbox(self): self.runTest( [{"type": u"EmptyTag", "name": u"input", "data": [(u"type", u"checkbox"), (u"name", u"foo"), (u"value", u"bar")]}], FieldStorage({"foo": "bar"}), [{"type": u"EmptyTag", "name": u"input", "data": [(u"type", u"checkbox"), (u"name", u"foo"), (u"value", u"bar"), (u"checked", u"")]}]) def testSingleCheckboxShouldBeUnchecked(self): self.runTest( [{"type": u"EmptyTag", "name": u"input", "data": [(u"type", u"checkbox"), (u"name", u"foo"), (u"value", u"quux")]}], FieldStorage({"foo": "bar"}), [{"type": u"EmptyTag", "name": u"input", "data": [(u"type", u"checkbox"), (u"name", u"foo"), (u"value", u"quux")]}]) def testSingleCheckboxCheckedByDefault(self): self.runTest( [{"type": u"EmptyTag", "name": u"input", "data": [(u"type", u"checkbox"), (u"name", u"foo"), (u"value", u"bar"), (u"checked", u"")]}], FieldStorage({"foo": "bar"}), [{"type": u"EmptyTag", "name": u"input", "data": [(u"type", u"checkbox"), (u"name", u"foo"), (u"value", u"bar"), (u"checked", u"")]}]) def testSingleCheckboxCheckedByDefaultShouldBeUnchecked(self): self.runTest( [{"type": u"EmptyTag", "name": u"input", "data": [(u"type", u"checkbox"), (u"name", u"foo"), (u"value", u"quux"), (u"checked", u"")]}], FieldStorage({"foo": "bar"}), [{"type": u"EmptyTag", "name": u"input", "data": [(u"type", u"checkbox"), (u"name", u"foo"), (u"value", u"quux")]}]) def testSingleTextareaWithValue(self): self.runTest( [{"type": u"StartTag", "name": u"textarea", "data": [(u"name", u"foo")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"textarea", "data": []}], FieldStorage({"foo": "bar"}), [{"type": u"StartTag", "name": u"textarea", "data": [(u"name", u"foo")]}, {"type": u"Characters", "data": u"bar"}, {"type": u"EndTag", "name": u"textarea", "data": []}]) def testSingleTextareaWithoutValue(self): self.runTest( [{"type": u"StartTag", "name": u"textarea", "data": [(u"name", u"foo")]}, {"type": u"EndTag", "name": u"textarea", "data": []}], FieldStorage({"foo": "bar"}), [{"type": u"StartTag", "name": u"textarea", "data": [(u"name", u"foo")]}, {"type": u"Characters", "data": u"bar"}, {"type": u"EndTag", "name": u"textarea", "data": []}]) def testSingleSelectWithValue(self): self.runTest( [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"bar")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}], FieldStorage({"foo": "bar"}), [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"bar"), (u"selected", u"")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}]) def testSingleSelectWithValueShouldBeUnselected(self): self.runTest( [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"bar")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}], FieldStorage({"foo": "quux"}), [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"bar")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}]) def testSingleSelectWithoutValue(self): self.runTest( [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": []}, {"type": u"Characters", "data": u"bar"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}], FieldStorage({"foo": "bar"}), [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": [(u"selected", u"")]}, {"type": u"Characters", "data": u"bar"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}]) def testSingleSelectWithoutValueShouldBeUnselected(self): self.runTest( [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": []}, {"type": u"Characters", "data": u"bar"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}], FieldStorage({"foo": "quux"}), [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": []}, {"type": u"Characters", "data": u"bar"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}]) def testSingleSelectTwoOptionsWithValue(self): self.runTest( [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"bar")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"quux")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}], FieldStorage({"foo": "bar"}), [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"bar"), (u"selected", u"")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"quux")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}]) def testSingleSelectTwoOptionsWithValueShouldBeUnselected(self): self.runTest( [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"bar")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"baz")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}], FieldStorage({"foo": "quux"}), [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"bar")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"baz")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}]) def testSingleSelectTwoOptionsWithoutValue(self): self.runTest( [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": []}, {"type": u"Characters", "data": u"bar"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"StartTag", "name": u"option", "data": []}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}], FieldStorage({"foo": "bar"}), [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": [(u"selected", u"")]}, {"type": u"Characters", "data": u"bar"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"StartTag", "name": u"option", "data": []}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}]) def testSingleSelectTwoOptionsWithoutValueShouldBeUnselected(self): self.runTest( [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": []}, {"type": u"Characters", "data": u"bar"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"StartTag", "name": u"option", "data": []}, {"type": u"Characters", "data": u"baz"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}], FieldStorage({"foo": "quux"}), [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": []}, {"type": u"Characters", "data": u"bar"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"StartTag", "name": u"option", "data": []}, {"type": u"Characters", "data": u"baz"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}]) def testSingleSelectMultiple(self): self.runTest( [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo"), (u"multiple", u"")]}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"bar")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"quux")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}], FieldStorage({"foo": ["bar", "quux"]}), [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo"), (u"multiple", u"")]}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"bar"), (u"selected", u"")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"quux"), (u"selected", u"")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}]) def testTwoSelect(self): self.runTest( [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"bar")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"quux")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}, {"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"bar")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"quux")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}], FieldStorage({"foo": ["bar", "quux"]}), [{"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"bar"), (u"selected", u"")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"quux")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}, {"type": u"StartTag", "name": u"select", "data": [(u"name", u"foo")]}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"bar")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"StartTag", "name": u"option", "data": [(u"value", u"quux"), (u"selected", u"")]}, {"type": u"Characters", "data": u"quux"}, {"type": u"EndTag", "name": u"option", "data": []}, {"type": u"EndTag", "name": u"select", "data": []}]) def buildTestSuite(): return unittest.defaultTestLoader.loadTestsFromName(__name__) def main(): buildTestSuite() unittest.main() if __name__ == "__main__": main()