def testInvalidTimestamp(self):
     message = json_format_proto3_pb2.TestTimestamp()
     text = '{"value": "10000-01-01T00:00:00.00Z"}'
     self.assertRaisesRegex(
         json_format.ParseError,
         'time data \'10000-01-01T00:00:00\' does not match'
         ' format \'%Y-%m-%dT%H:%M:%S\'.', json_format.Parse, text, message)
     text = '{"value": "1970-01-01T00:00:00.0123456789012Z"}'
     self.assertRaisesRegex(
         well_known_types.ParseError,
         'nanos 0123456789012 more than 9 fractional digits.',
         json_format.Parse, text, message)
     text = '{"value": "1972-01-01T01:00:00.01+08"}'
     self.assertRaisesRegex(well_known_types.ParseError,
                            (r'Invalid timezone offset value: \+08.'),
                            json_format.Parse, text, message)
     # Time smaller than minimum time.
     text = '{"value": "0000-01-01T00:00:00Z"}'
     self.assertRaisesRegex(
         json_format.ParseError,
         'Failed to parse value field: year (0 )?is out of range.',
         json_format.Parse, text, message)
     # Time bigger than maxinum time.
     message.value.seconds = 253402300800
     self.assertRaisesRegex(OverflowError, 'date value out of range',
                            json_format.MessageToJson, message)
コード例 #2
0
 def testTimestampMessage(self):
     message = json_format_proto3_pb2.TestTimestamp()
     message.value.seconds = 0
     message.value.nanos = 0
     message.repeated_value.add().seconds = 20
     message.repeated_value[0].nanos = 1
     message.repeated_value.add().seconds = 0
     message.repeated_value[1].nanos = 10000
     message.repeated_value.add().seconds = 100000000
     message.repeated_value[2].nanos = 0
     # Maximum time
     message.repeated_value.add().seconds = 253402300799
     message.repeated_value[3].nanos = 999999999
     # Minimum time
     message.repeated_value.add().seconds = -62135596800
     message.repeated_value[4].nanos = 0
     self.assertEqual(
         json.loads(json_format.MessageToJson(message, True)),
         json.loads('{'
                    '"value": "1970-01-01T00:00:00Z",'
                    '"repeatedValue": ['
                    '  "1970-01-01T00:00:20.000000001Z",'
                    '  "1970-01-01T00:00:00.000010Z",'
                    '  "1973-03-03T09:46:40Z",'
                    '  "9999-12-31T23:59:59.999999999Z",'
                    '  "0001-01-01T00:00:00Z"'
                    ']'
                    '}'))
     parsed_message = json_format_proto3_pb2.TestTimestamp()
     self.CheckParseBack(message, parsed_message)
     text = (r'{"value": "1970-01-01T00:00:00.01+08:00",'
             r'"repeatedValue":['
             r'  "1970-01-01T00:00:00.01+08:30",'
             r'  "1970-01-01T00:00:00.01-01:23"]}')
     json_format.Parse(text, parsed_message)
     self.assertEqual(parsed_message.value.seconds, -8 * 3600)
     self.assertEqual(parsed_message.value.nanos, 10000000)
     self.assertEqual(parsed_message.repeated_value[0].seconds, -8.5 * 3600)
     self.assertEqual(parsed_message.repeated_value[1].seconds,
                      3600 + 23 * 60)
コード例 #3
0
    def testPreservingProtoFieldNames(self):
        message = json_format_proto3_pb2.TestMessage()
        message.int32_value = 12345
        self.assertEqual('{\n  "int32Value": 12345\n}',
                         json_format.MessageToJson(message))
        self.assertEqual('{\n  "int32_value": 12345\n}',
                         json_format.MessageToJson(message, False, True))
        # When including_default_value_fields is True.
        message = json_format_proto3_pb2.TestTimestamp()
        self.assertEqual('{\n  "repeatedValue": []\n}',
                         json_format.MessageToJson(message, True, False))
        self.assertEqual('{\n  "repeated_value": []\n}',
                         json_format.MessageToJson(message, True, True))

        # Parsers accept both original proto field names and lowerCamelCase names.
        message = json_format_proto3_pb2.TestMessage()
        json_format.Parse('{"int32Value": 54321}', message)
        self.assertEqual(54321, message.int32_value)
        json_format.Parse('{"int32_value": 12345}', message)
        self.assertEqual(12345, message.int32_value)
コード例 #4
0
 def testInvalidTimestamp(self):
   message = json_format_proto3_pb2.TestTimestamp()
   text = '{"value": "10000-01-01T00:00:00.00Z"}'
   self.assertRaisesRegexp(
       json_format.ParseError,
       'Failed to parse value field: '
       'time data \'10000-01-01T00:00:00\' does not match'
       ' format \'%Y-%m-%dT%H:%M:%S\'.',
       json_format.Parse, text, message)
   text = '{"value": "1970-01-01T00:00:00.0123456789012Z"}'
   self.assertRaisesRegexp(
       json_format.ParseError,
       'nanos 0123456789012 more than 9 fractional digits.',
       json_format.Parse, text, message)
   text = '{"value": "1972-01-01T01:00:00.01+08"}'
   self.assertRaisesRegexp(
       json_format.ParseError,
       (r'Invalid timezone offset value: \+08.'),
       json_format.Parse, text, message)
   # Time smaller than minimum time.
   text = '{"value": "0000-01-01T00:00:00Z"}'
   self.assertRaisesRegexp(
       json_format.ParseError,
       'Failed to parse value field: year (0 )?is out of range.',
       json_format.Parse, text, message)
   # Time bigger than maximum time.
   message.value.seconds = 253402300800
   self.assertRaisesRegexp(
       OverflowError,
       'date value out of range',
       json_format.MessageToJson, message)
   # Lower case t does not accept.
   text = '{"value": "0001-01-01t00:00:00Z"}'
   with self.assertRaises(json_format.ParseError) as e:
     json_format.Parse(text, message)
   self.assertEqual(
       'Failed to parse value field: '
       'time data \'0001-01-01t00:00:00\' does not match format '
       '\'%Y-%m-%dT%H:%M:%S\', lowercase \'t\' is not accepted.',
       str(e.exception))