3
���h�� � @ s� d Z ddlZddlZddlZddlZddlZyddlZW n ek
rT ddlZY nX ddl m
Z
ddl mZ ddl mZ ddl m
Z
ddl mZ ddl mZ dd l mZ dd
l mZ ddlmZ ddlmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ejZG dd� de�ZG dd� de�ZG dd� de�ZG dd� de�Z G dd� de�Z!G dd� de�Z"G dd � d e�Z#G d!d"� d"e�Z$G d#d$� d$e�Z%G d%d&� d&e�Z&e'd'k�r�ej(� dS )(ziUnittest for reflection.py, which also indirectly tests the output of the
pure-Python protocol compiler.
� N)�unittest_import_pb2)�unittest_mset_pb2)�unittest_pb2)�descriptor_pb2)�
descriptor)�message)�
reflection)�text_format)�api_implementation)�more_extensions_pb2)�more_messages_pb2)�message_set_extensions_pb2)�wire_format)� test_util)�testing_refleaks)�decoderc @ s\ e Zd ZdZdd� Zdd� ZeZeZeZeZ dd� Z
e
Zdd � Zd
d� Z
dd
� Zdd� ZdS )�_MiniDecodera� Decodes a stream of values from a string.
Once upon a time we actually had a class called decoder.Decoder. Then we
got rid of it during a redesign that made decoding much, much faster overall.
But a couple tests in this file used it to check that the serialized form of
a message was correct. So, this class implements just the methods that were
used by said tests, so that we don't have to rewrite the tests.
c C s || _ d| _d S )Nr )�_bytes�_pos)�self�bytes� r �%/usr/lib/python3.6/reflection_test.py�__init__O s z_MiniDecoder.__init__c C s t j| j| j�\}| _|S )N)r Z
_DecodeVarintr r )r �resultr r r �
ReadVarintS s z_MiniDecoder.ReadVarintc C s t j| j� �S )N)r ZZigZagDecoder )r r r r �
ReadSInt64\ s z_MiniDecoder.ReadSInt64c C s t j| j� �S )N)r Z UnpackTagr )r r r r �ReadFieldNumberAndWireTypea s z'_MiniDecoder.ReadFieldNumberAndWireTypec C s4 t jd| j| j| jd � �d }| jd7 _|S )Nz<f� r )�struct�unpackr r )r r r r r � ReadFloatd s "z_MiniDecoder.ReadFloatc C s4 t jd| j| j| jd � �d }| jd7 _|S )Nz<d� r )r r r r )r r r r r �
ReadDoublei s "z_MiniDecoder.ReadDoublec C s | j t| j�kS )N)r �lenr )r r r r �EndOfStreamn s z_MiniDecoder.EndOfStreamN)�__name__�
__module__�__qualname__�__doc__r r � ReadInt32� ReadInt64�
ReadUInt32�
ReadUInt64r �
ReadSInt32r r! r# r% r r r r r E s r c @ s� e Zd Zdd� Zdd� Zdd� Zdd� Zd d
� Zdd� Zd
d� Z dd� Z
dd� Zdd� Zdd� Z
dd� Zdd� Zdd� Zdd� Zdd � Zd!d"� Zd#d$� Zd%d&� Zd'd(� Zd)d*� Zd+d,� Zd-d.� Zd/d0� Zd1d2� Zd3d4� Zd5d6� Zd7d8� Zd9d:� Zd;d<� Z d=d>� Z!d?d@� Z"dAdB� Z#dCdD� Z$dEdF� Z%dGdH� Z&dIdJ� Z'dKdL� Z(dMdN� Z)dOdP� Z*dQdR� Z+dSdT� Z,dUdV� Z-dWdX� Z.dYdZ� Z/d[d\� Z0d]d^� Z1d_d`� Z2dadb� Z3dcdd� Z4dedf� Z5dgdh� Z6didj� Z7dkdl� Z8dmdn� Z9dodp� Z:dqdr� Z;dsdt� Z<dudv� Z=dwdx� Z>dydz� Z?d{d|� Z@d}d~� ZAdd�� ZBd�d�� ZCd�d�� ZDd�d�� ZEd�d�� ZFd�d�� ZGd�d�� ZHd�d�� ZId�d�� ZJd�d�� ZKd�d�� ZLd�d�� ZMd�d�� ZNd�d�� ZOd�d�� ZPd�d�� ZQd�d�d��ZRd�d�� ZSeTjUeVjW� d�k�p�eVjX� d�kd��d�d�� �ZYd�d�� ZZd�d�� Z[d�d�� Z\d�d�� Z]d�d�� Z^d�d�� Z_d�S )��ReflectionTestc C sB | j t|�t|�� x(tt|��D ]}| j || || � q"W d S )N)�assertEqualr$ �range)r �valuesZothers�ir r r �assertListsEqualt s zReflectionTest.assertListsEqualc C sP t jdddd d�}| jd|j� | jd|j� | jd|j� | j|jd�� d S )N� g+�)K@�optional_string)�optional_int32�optional_doubler6 �optional_floatr9 )r �TestAllTypesr0 r7 r8 r6 �assertFalse�HasField)r �protor r r �testScalarConstructory s z$ReflectionTest.testScalarConstructorc C s� t jddddgddgdddgd gd d
�}| jddddgt|j�� | jddgt|j�� | jdddgt|j�� | jd gt|j�� | jg t|j�� d S )N� � � r g�G�z��?g+�)K@TFr6 )�repeated_int32�repeated_double�
repeated_bool�repeated_string�repeated_float) r r: r0 �listrB rC rD rE rF )r r= r r r �testRepeatedScalarConstructor� s
z,ReflectionTest.testRepeatedScalarConstructorc C s t jt jjt jjd�t jjt jjd�gt jd
d�t jdd�t jdd�gt jj� t jjdd�t jjdd�gd �}| jt jjt jjd�t jjt jjd�gt|j �� | jt jdd�t jdd�t jdd�gt|j
�� | jt jj� t jjdd�t jjdd�gt|j�� d S )N)�bb�+ )�ci� � r? )�ar@ )�repeated_nested_message�repeated_foreign_message�
repeatedgroupi���i���)r r: �
NestedMessage�FOO�BAR�ForeignMessageZ
RepeatedGroupr0 rG rN rO rP )r r= r r r � testRepeatedCompositeConstructor� s6
z/ReflectionTest.testRepeatedCompositeConstructorc C s t jddddgdddgt jjt jjd�t jjt jjd�gt jdd �t jd
d �t jdd �gd d�}| jd|j� | jd|j� | jddgt |j
�� | jdddgt |j�� | jt jjt jjd�t jjt jjd�gt |j�� | jt jdd �t jd
d �t jdd �gt |j
�� | j|jd
�� d S )Nr5 r6 g�G�z��?g+�)K@TF)rI rJ )rK i� rL )r7 r6 rC rD rN rO �optional_nested_messagerV i���i���)r r: rQ rR rS rT r0 r7 r6 rG rC rD rN rO r; r<