Пример #1
0
 def test_unicode_in_binary_escape(self):
     stuff = Stuff(
         aBinary=b'\\"hello'.decode('utf-8'))
     j = writeToJSON(stuff)
     self.assertEqual(j, b'{\n  "aBinary": "\\\\\\"hello"\n}')
     stuff_read = readStuffFromJSON(j)
     self.assertEqual(stuff_read.aBinary, b'\\"hello')
Пример #2
0
    def test_foreign_json(self):
        """
        Not all JSON that we decode will be encoded by this python thrift
        protocol implementation.  E.g. this encode implementation stuffs raw
        unicode into the output, but we may use this implementation to decode
        JSON from other implementations, which escape unicode (sometimes
        incorrectly e.g. PHP).  And we may use this implementation to decode
        JSON that was not encoded by thrift at all, which may contain nulls.
        """
        s = "a fancy e looks like \u00e9"
        j = '{"aString": "a fancy e looks like \\u00e9", "anotherString": null, "anInteger": 10, "unknownField": null}'
        stuff = Stuff()
        Serializer.deserialize(
            TSimpleJSONProtocol.TSimpleJSONProtocolFactory(), j, stuff
        )
        self.assertEqual(stuff.aString, s)

        def should_throw():
            j = '{"aString": "foo", "anotherString": nullcorrupt}'
            stuff = Stuff()
            Serializer.deserialize(
                TSimpleJSONProtocol.TSimpleJSONProtocolFactory(), j, stuff
            )

        self.assertRaises(TProtocol.TProtocolException, should_throw)
Пример #3
0
 def test_unicode_string(self):
     stuff = Stuff(aString="año".encode("utf-8"))
     j = writeToJSON(stuff)
     stuff_read = readStuffFromJSON(j)
     if sys.version_info[0] == 3:
         self.assertEqual(stuff_read.aString, "año")
     else:
         self.assertEqual(stuff_read.aString, "año".encode("utf-8"))
Пример #4
0
 def test_set(self):
     stuff = Stuff(aListOfSet=[set(["hello"]), set(["world"])], anotherString="Hey")
     j = writeToJSON(stuff)
     stuff_read = readStuffFromJSON(j)
     self.assertEqual(len(stuff_read.aListOfSet), 2)
     self.assertEqual(stuff_read.aListOfSet[0], set(["hello"]))
     self.assertEqual(stuff_read.aListOfSet[1], set(["world"]))
     self.assertEqual(stuff_read.anotherString, "Hey")
Пример #5
0
 def test_deserializer(self):
     j = '{"aShort": 1, "anInteger": 2, "aLong": 3}'
     stuff = Stuff()
     Serializer.deserialize(
         TSimpleJSONProtocol.TSimpleJSONProtocolFactory(), j, stuff)
     self.assertEqual(stuff.aShort, 1)
     self.assertEqual(stuff.anInteger, 2)
     self.assertEqual(stuff.aLong, 3)
Пример #6
0
 def test_list(self):
     stuff = Stuff(aList=[[[["hello", "world"], ["good", "bye"]]],
                          [[["what", "is"], ["going", "on"]]]],
                   anotherString="Hey")
     j = writeToJSON(stuff)
     stuff_read = readStuffFromJSON(j)
     self.assertEqual(len(stuff_read.aList), 2)
     self.assertEqual(stuff_read.aList[0][0][0], ["hello", "world"])
     self.assertEqual(stuff_read.aList[0][0][1], ["good", "bye"])
     self.assertEqual(stuff_read.aList[1][0][0], ["what", "is"])
     self.assertEqual(stuff_read.aList[1][0][1], ["going", "on"])
     self.assertEqual(stuff_read.anotherString, "Hey")
Пример #7
0
 def test_primitive_type(self):
     stuff = Stuff(aString="hello",
                   aShort=10,
                   anInteger=23990,
                   aLong=123456789012,
                   aDouble=1234567.9,
                   aBool=True)
     j = writeToJSON(stuff)
     stuff_read = readStuffFromJSON(j)
     self.assertEqual(stuff_read.aString, "hello")
     self.assertEqual(stuff_read.aShort, 10)
     self.assertEqual(stuff_read.anInteger, 23990)
     self.assertEqual(stuff_read.aLong, 123456789012)
     self.assertEqual(stuff_read.aDouble, 1234567.9)
     self.assertTrue(stuff_read.aBool)
Пример #8
0
 def test_struct(self):
     stuff = Stuff(aStruct=SomeStruct(anInteger=12, aMap={"hi": 1.5}),
                   aListOfStruct=[
                       SomeStruct(anInteger=10, aMap={"good": 2.0}),
                       SomeStruct(anInteger=11, aMap={"bye": 1.0})
                   ],
                   anotherString="Hey")
     j = writeToJSON(stuff)
     stuff_read = readStuffFromJSON(j)
     self.assertEqual(len(stuff_read.aListOfStruct), 2)
     self.assertEqual(stuff_read.aListOfStruct[0].anInteger, 10)
     self.assertEqual(stuff_read.aListOfStruct[0].aMap["good"], 2.0)
     self.assertEqual(stuff_read.aListOfStruct[1].anInteger, 11)
     self.assertEqual(stuff_read.aListOfStruct[1].aMap["bye"], 1.0)
     self.assertEqual(stuff_read.anotherString, "Hey")
Пример #9
0
 def test_map(self):
     stuff = Stuff(
             aMap={1: {"hello": [1,2,3,4],
                       "world": [5,6,7,8]},
                   2: {"good": [100, 200],
                       "bye": [300, 400]}
                   },
             anotherString="Hey")
     j = writeToJSON(stuff)
     stuff_read = readStuffFromJSON(j)
     self.assertEqual(len(stuff_read.aMap), 2)
     self.assertEqual(stuff_read.aMap[1]["hello"], [1,2,3,4])
     self.assertEqual(stuff_read.aMap[1]["world"], [5,6,7,8])
     self.assertEqual(stuff_read.aMap[2]["good"], [100, 200])
     self.assertEqual(stuff_read.aMap[2]["bye"], [300, 400])
     self.assertEqual(stuff_read.anotherString, "Hey")
Пример #10
0
 def test_escape_string(self):
     stuff = Stuff(
         aString=b'\\hello')
     j = writeToJSON(stuff)
     stuff_read = readStuffFromJSON(j)
     self.assertEqual(stuff_read.aString, '\\hello')
Пример #11
0
    def test_skip_unrecognized_fields(self):
        stuff = Stuff(
            aString="hello",
            aShort=10,
            anInteger=23990,
            aLong=123456789012,
            aDouble=1234567.9,
            aBool=True,
            aBinary=b'\\"hello'.decode("utf-8"),
            aStruct=SomeStruct(anInteger=12, aMap={"hi": 1.5}),
            aList=[
                [[["hello", "world"], ["good", "bye"]]],
                [[["what", "is"], ["going", "on"]]],
            ],
            aMap={
                1: {"hello": [1, 2, 3, 4], "world": [5, 6, 7, 8]},
                2: {"good": [100, 200], "bye": [300, 400]},
            },
            anotherString="Hey",
            aListOfStruct=[
                SomeStruct(anInteger=10, aMap={"good": 2.0}),
                SomeStruct(anInteger=11, aMap={"bye": 1.0}),
            ],
            aListOfSet=[{"hello"}, {"world"}],
            aListOfDouble=[0.0, 1.25, 10.0],
            anotherMap={3: {"foo": 1, "bar": 12}, 4: {"baz": 123, "bazzz": 1234}},
        )

        j = writeToJSON(stuff)
        stuff_read = readStuffFromJSON(j, struct_type=StuffMissing)
        self.assertFalse(hasattr(stuff_read, "aString"))
        self.assertFalse(hasattr(stuff_read, "aShort"))
        self.assertEqual(stuff_read.anInteger, 23990)
        self.assertFalse(hasattr(stuff_read, "aLong"))
        self.assertEqual(stuff_read.aDouble, 1234567.9)
        self.assertFalse(hasattr(stuff_read, "aBool"))
        self.assertEqual(stuff_read.aBinary, b'\\"hello')

        self.assertFalse(hasattr(stuff_read, "aStruct"))

        self.assertEqual(len(stuff_read.aList), 2)
        self.assertEqual(stuff_read.aList[0][0][0], ["hello", "world"])
        self.assertEqual(stuff_read.aList[0][0][1], ["good", "bye"])
        self.assertEqual(stuff_read.aList[1][0][0], ["what", "is"])
        self.assertEqual(stuff_read.aList[1][0][1], ["going", "on"])

        self.assertFalse(hasattr(stuff_read, "aMap"))

        self.assertEqual(stuff_read.anotherString, "Hey")

        self.assertFalse(hasattr(stuff_read, "aListOfStruct"))

        self.assertEqual(len(stuff_read.aListOfSet), 2)
        self.assertEqual(stuff_read.aListOfSet[0], {"hello"})
        self.assertEqual(stuff_read.aListOfSet[1], {"world"})

        self.assertFalse(hasattr(stuff_read, "aListOfDouble"))

        self.assertEqual(len(stuff_read.anotherMap), 2)
        self.assertEqual(stuff_read.anotherMap[3]["foo"], 1)
        self.assertEqual(stuff_read.anotherMap[3]["foo"], 1)
        self.assertEqual(stuff_read.anotherMap[3]["bar"], 12)
        self.assertEqual(stuff_read.anotherMap[4]["baz"], 123)
        self.assertEqual(stuff_read.anotherMap[4]["bazzz"], 1234)

        stuff_read_2 = readStuffFromJSON(j, struct_type=Empty)
        self.assertFalse(hasattr(stuff_read_2, "aString"))
        self.assertFalse(hasattr(stuff_read_2, "aShort"))
        self.assertFalse(hasattr(stuff_read_2, "anInteger"))
        self.assertFalse(hasattr(stuff_read_2, "aLong"))
        self.assertFalse(hasattr(stuff_read_2, "aDouble"))
        self.assertFalse(hasattr(stuff_read_2, "aBool"))
        self.assertFalse(hasattr(stuff_read_2, "aBinary"))
        self.assertFalse(hasattr(stuff_read_2, "aStruct"))
        self.assertFalse(hasattr(stuff_read_2, "aList"))
        self.assertFalse(hasattr(stuff_read_2, "aMap"))
        self.assertFalse(hasattr(stuff_read_2, "anotherString"))
        self.assertFalse(hasattr(stuff_read_2, "aListOfStruct"))
        self.assertFalse(hasattr(stuff_read_2, "aListOfSet"))
        self.assertFalse(hasattr(stuff_read_2, "aListOfDouble"))
        self.assertFalse(hasattr(stuff_read_2, "anotherMap"))
Пример #12
0
 def should_throw():
     j = '{"aString": "foo", "anotherString": nullcorrupt}'
     stuff = Stuff()
     Serializer.deserialize(
         TSimpleJSONProtocol.TSimpleJSONProtocolFactory(), j, stuff
     )