FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

GitHub Viewer

# coding: utf-8 ''' Created on 2011-05-13 @author: berni Updated 2012-03-28 Tomasz 'Doppler' Najdek Updated 2012-09-24 Bernard 'berni' Kobos ''' import sys from parser import parse, MalformedQueryStringError from builder import build import unittest class KnownValues(unittest.TestCase): ''' Test output for known query string values ''' knownValuesClean = ( ({u'omg': {0: u'0001212'}}), ( # "packetname=fd§ion[0]['words'][2]=§ion[0]['words'][2]=&language=1&packetdesc=sdfsd&newlanguage=proponowany jezyk..&newsectionname=§ion[0]['words'][1]=§ion[0]['words'][1]=&packettype=radio§ion[0]['words'][0]=sdfsd§ion[0]['words'][0]=ds", {u"packetname": u"fd", u"section": {0: {u"words": {0: [u"sdfsd", u"ds"], 1: [u"", u""], 2: [u"", u""]}}}, u"language": u"1", u"packetdesc": u"sdfsd", u"newlanguage": u"proponowany jezyk..", u"newsectionname": u"", u"packettype": u"radio"} ), ( # "language=1&newlanguage=proponowany jezyk..&newsectionname=&packetdesc=Zajebiste slowka na jutrzejszy sprawdzian z chemii&packetid=4&packetname=Chemia spr&packettype=1§ion[10]['name']=sekcja siatkarska§ion[10]['words'][-1]=§ion[10]['words'][-1]=§ion[10]['words'][-2]=§ion[10]['words'][-2]=§ion[10]['words'][30]=noga§ion[10]['words'][30]=leg§ion[11]['del_words'][32]=kciuk§ion[11]['del_words'][32]=thimb§ion[11]['del_words'][33]=oko§ion[11]['del_words'][33]=an eye§ion[11]['name']=sekcja siatkarska1§ion[11]['words'][-1]=§ion[11]['words'][-1]=§ion[11]['words'][-2]=§ion[11]['words'][-2]=§ion[11]['words'][31]=renca§ion[11]['words'][31]=rukka§ion[12]['name']=sekcja siatkarska2§ion[12]['words'][-1]=§ion[12]['words'][-1]=§ion[12]['words'][-2]=§ion[12]['words'][-2]=§ion[12]['words'][34]=wlos§ion[12]['words'][34]=a hair§ionnew=sekcja siatkarska§ionnew=sekcja siatkarska1§ionnew=sekcja siatkarska2&tags=dance, angielski, taniec", {u"packetdesc": u"Zajebiste slowka na jutrzejszy sprawdzian z chemii", u"packetid": u"4", u"packetname": u"Chemia spr", u"section": {10: {u"words": {-1: [u"", u""], -2: [u"", u""], 30: [u"noga", u"leg"]}, u"name": u"sekcja siatkarska"}, 11: {u"words": {-1: [u"", u""], -2: [u"", u""], 31: [u"renca", u"rukka"]}, u"del_words": {32: [u"kciuk", u"thimb"], 33: [u"oko", u"an eye"]}, u"name": u"sekcja siatkarska1"}, 12: {u"words": {-1: [u"", u""], -2: [u"", u""], 34: [u"wlos", u"a hair"]}, u"name": u"sekcja siatkarska2"}}, u"language": u"1", u"newlanguage": u"proponowany jezyk..", u"packettype": u"1", u"tags": u"dance, angielski, taniec", u"newsectionname": u"", u"sectionnew": [u"sekcja siatkarska", u"sekcja siatkarska1", u"sekcja siatkarska2"]} ), ( # "f=a hair§ionnew[]=sekcja siatkarska§ionnew[]=sekcja siatkarska1§ionnew[]=sekcja siatkarska2", {u"f": u"a hair", u"sectionnew": {u"": [u"sekcja siatkarska", u"sekcja siatkarska1", u"sekcja siatkarska2"]}} ), # f = a ({u"f": u"a"}), # "" ({}), ) knownValues = ( ({u'omg': {0: u'0001212'}}), ( # "packetname=f%26d§ion%5B0%5D%5B%27words%27%5D%5B2%5D=§ion%5B0%5D%5B%27words%27%5D%5B2%5D=&language=1&packetdesc=sdfsd&newlanguage=proponowany+jezyk..&newsectionname=§ion%5B0%5D%5B%27words%27%5D%5B1%5D=§ion%5B0%5D%5B%27words%27%5D%5B1%5D=&packettype=radio§ion%5B0%5D%5B%27words%27%5D%5B0%5D=sdfsd§ion%5B0%5D%5B%27words%27%5D%5B0%5D=ds", {u"packetname": u"f&d", u"section": {0: {u"words": {0: [u"sdfsd", u"ds"], 1: [u"", u""], 2: [u"", u""]}}}, u"language": u"1", u"packetdesc": u"sdfsd", u"newlanguage": u"proponowany jezyk..", u"newsectionname": u"", u"packettype": u"radio"} ), ( # "language=1&newlanguage=proponowany+jezyk..&newsectionname=&packetdesc=Zajebiste+slowka+na+jutrzejszy+sprawdzian+z+chemii&packetid=4&packetname=Chemia+spr&packettype=1§ion%5B10%5D%5B%27name%27%5D=sekcja+siatkarska§ion%5B10%5D%5B%27words%27%5D%5B-1%5D=§ion%5B10%5D%5B%27words%27%5D%5B-1%5D=§ion%5B10%5D%5B%27words%27%5D%5B-2%5D=§ion%5B10%5D%5B%27words%27%5D%5B-2%5D=§ion%5B10%5D%5B%27words%27%5D%5B30%5D=noga§ion%5B10%5D%5B%27words%27%5D%5B30%5D=leg§ion%5B11%5D%5B%27del_words%27%5D%5B32%5D=kciuk§ion%5B11%5D%5B%27del_words%27%5D%5B32%5D=thimb§ion%5B11%5D%5B%27del_words%27%5D%5B33%5D=oko§ion%5B11%5D%5B%27del_words%27%5D%5B33%5D=an+eye§ion%5B11%5D%5B%27name%27%5D=sekcja+siatkarska1§ion%5B11%5D%5B%27words%27%5D%5B-1%5D=§ion%5B11%5D%5B%27words%27%5D%5B-1%5D=§ion%5B11%5D%5B%27words%27%5D%5B-2%5D=§ion%5B11%5D%5B%27words%27%5D%5B-2%5D=§ion%5B11%5D%5B%27words%27%5D%5B31%5D=renca§ion%5B11%5D%5B%27words%27%5D%5B31%5D=rukka§ion%5B12%5D%5B%27name%27%5D=sekcja+siatkarska2§ion%5B12%5D%5B%27words%27%5D%5B-1%5D=§ion%5B12%5D%5B%27words%27%5D%5B-1%5D=§ion%5B12%5D%5B%27words%27%5D%5B-2%5D=§ion%5B12%5D%5B%27words%27%5D%5B-2%5D=§ion%5B12%5D%5B%27words%27%5D%5B34%5D=wlos§ion%5B12%5D%5B%27words%27%5D%5B34%5D=a+hair§ionnew=sekcja%3Dsiatkarska§ionnew=sekcja+siatkarska1§ionnew=sekcja+siatkarska2&tags=dance%2C+angielski%2C+taniec", {u"packetdesc": u"Zajebiste slowka na jutrzejszy sprawdzian z chemii", u"packetid": u"4", u"packetname": u"Chemia spr", u"section": {10: {u"words": {-1: [u"", u""], -2: [u"", u""], 30: [u"noga", u"leg"]}, u"name": u"sekcja siatkarska"}, 11: {u"words": {-1: [u"", u""], -2: [u"", u""], 31: [u"renca", u"rukka"]}, u"del_words": {32: [u"kciuk", u"thimb"], 33: [u"oko", u"an eye"]}, u"name": u"sekcja siatkarska1"}, 12: {u"words": {-1: [u"", u""], -2: [u"", u""], 34: [u"wlos", u"a hair"]}, u"name": u"sekcja siatkarska2"}}, u"language": u"1", u"newlanguage": u"proponowany jezyk..", u"packettype": u"1", u"tags": u"dance, angielski, taniec", u"newsectionname": "", u"sectionnew": [u"sekcja=siatkarska", u"sekcja siatkarska1", u"sekcja siatkarska2"]} ), ( # "f=a+hair§ionnew%5B%5D=sekcja+siatkarska§ionnew%5B%5D=sekcja+siatkarska1§ionnew%5B%5D=sekcja+siatkarska2", {u"f": u"a hair", u"sectionnew": {u"": [u"sekcja siatkarska", u"sekcja siatkarska1", u"sekcja siatkarska2"]}} ), # f = a ({u"f": u"a"}), # "" ({}), ) knownValuesCleanWithUnicode = ( # f = some unicode ({u"f": u"\u9017"}), ) knownValuesWithUnicode = ( # f = some unicode ({u"f": u"\u9017"}), ) def test_parse_known_values_clean(self): """parse should give known result with known input""" self.maxDiff = None for dic in self.knownValuesClean: result = parse(build(dic), unquote=True) self.assertEqual(dic, result) def test_parse_known_values(self): """parse should give known result with known input (quoted)""" self.maxDiff = None for dic in self.knownValues: result = parse(build(dic)) self.assertEqual(dic, result) def test_parse_known_values_clean_with_unicode(self): """parse should give known result with known input""" self.maxDiff = None encoding = 'utf-8' if sys.version_info[0] == 2 else None for dic in self.knownValuesClean + self.knownValuesCleanWithUnicode: result = parse(build(dic, encoding=encoding), unquote=True, encoding=encoding) self.assertEqual(dic, result) def test_parse_known_values_with_unicode(self): """parse should give known result with known input (quoted)""" self.maxDiff = None encoding = 'utf-8' if sys.version_info[0] == 2 else None for dic in self.knownValues + self.knownValuesWithUnicode: result = parse(build(dic, encoding=encoding), encoding=encoding) self.assertEqual(dic, result) def test_parse_unicode_input_string(self): """https://github.com/bernii/querystring-parser/issues/15""" qs = u'first_name=%D8%B9%D9%84%DB%8C' expected = {u'first_name': u'\u0639\u0644\u06cc'} self.assertEqual(parse(qs.encode('ascii')), expected) self.assertEqual(parse(qs), expected) class ParseBadInput(unittest.TestCase): ''' Test for exceptions when bad input is provided ''' badQueryStrings = ( "f&a hair§ionnew[]=sekcja siatkarska§ionnew[]=sekcja siatkarska1§ionnew[]=sekcja siatkarska2", "f=a hair§ionnew[=sekcja siatkarska§ionnew[]=sekcja siatkarska1§ionnew[]=sekcja siatkarska2", "packetname==fd&newsectionname=", "packetname=fd&newsectionname=§ion[0]['words'][1", "packetname=fd&newsectionname=&", ) def test_bad_input(self): """parse should fail with malformed querystring""" for qstr in self.badQueryStrings: self.assertRaises(MalformedQueryStringError, parse, qstr, False) class BuildUrl(unittest.TestCase): ''' Basic test to verify builder's functionality ''' request_data = { u"word": u"easy", u"more_words": [u"medium", u"average"], u"words_with_translation": {u"hard": u"trudny", u"tough": u"twardy"}, u"words_nested": {u"hard": [u"trudny", u"twardy"]} } def test_build(self): result = build(self.request_data) self.assertEquals(parse(result), self.request_data) def test_end_to_end(self): self.maxDiff = None querystring = build(self.request_data) result = parse(querystring) self.assertEquals(result, self.request_data) class BuilderAndParser(unittest.TestCase): ''' Testing both builder and parser ''' def test_end_to_end(self): parsed = parse('a[]=1&a[]=2') result = build(parsed) self.assertEquals(result, "a[]=1&a[]=2") if __name__ == "__main__": unittest.main()

Back | FazBrowse Home | New Git URL