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)
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)
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)
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))