@@ -26,43 +26,72 @@ def _get_target_class():
2626 def _make_one (self , * args , ** kw ):
2727 return self ._get_target_class ()(* args , ** kw )
2828
29- def test_ctor_defaults (self ):
29+ def test_constructor_defaults (self ):
3030 field = self ._make_one ('test' , 'STRING' )
31- self .assertEqual (field .name , 'test' )
32- self .assertEqual (field .field_type , 'STRING' )
33- self .assertEqual (field .mode , 'NULLABLE' )
34- self .assertIsNone (field .description )
35- self .assertIsNone (field .fields )
31+ self .assertEqual (field ._name , 'test' )
32+ self .assertEqual (field ._field_type , 'STRING' )
33+ self .assertEqual (field ._mode , 'NULLABLE' )
34+ self .assertIsNone (field ._description )
35+ self .assertEqual (field ._fields , () )
3636
37- def test_ctor_explicit (self ):
37+ def test_constructor_explicit (self ):
3838 field = self ._make_one ('test' , 'STRING' , mode = 'REQUIRED' ,
3939 description = 'Testing' )
40- self .assertEqual (field .name , 'test' )
41- self .assertEqual (field .field_type , 'STRING' )
42- self .assertEqual (field .mode , 'REQUIRED' )
43- self .assertEqual (field .description , 'Testing' )
44- self .assertIsNone (field .fields )
45-
46- def test_ctor_subfields (self ):
40+ self .assertEqual (field ._name , 'test' )
41+ self .assertEqual (field ._field_type , 'STRING' )
42+ self .assertEqual (field ._mode , 'REQUIRED' )
43+ self .assertEqual (field ._description , 'Testing' )
44+ self .assertEqual (field ._fields , ())
45+
46+ def test_constructor_subfields (self ):
47+ sub_field1 = self ._make_one ('area_code' , 'STRING' )
48+ sub_field2 = self ._make_one ('local_number' , 'STRING' )
4749 field = self ._make_one (
48- 'phone_number' , 'RECORD' ,
49- fields = [self ._make_one ('area_code' , 'STRING' ),
50- self ._make_one ('local_number' , 'STRING' )])
51- self .assertEqual (field .name , 'phone_number' )
52- self .assertEqual (field .field_type , 'RECORD' )
53- self .assertEqual (field .mode , 'NULLABLE' )
54- self .assertIsNone (field .description )
55- self .assertEqual (len (field .fields ), 2 )
56- self .assertEqual (field .fields [0 ].name , 'area_code' )
57- self .assertEqual (field .fields [0 ].field_type , 'STRING' )
58- self .assertEqual (field .fields [0 ].mode , 'NULLABLE' )
59- self .assertIsNone (field .fields [0 ].description )
60- self .assertIsNone (field .fields [0 ].fields )
61- self .assertEqual (field .fields [1 ].name , 'local_number' )
62- self .assertEqual (field .fields [1 ].field_type , 'STRING' )
63- self .assertEqual (field .fields [1 ].mode , 'NULLABLE' )
64- self .assertIsNone (field .fields [1 ].description )
65- self .assertIsNone (field .fields [1 ].fields )
50+ 'phone_number' ,
51+ 'RECORD' ,
52+ fields = [sub_field1 , sub_field2 ],
53+ )
54+ self .assertEqual (field ._name , 'phone_number' )
55+ self .assertEqual (field ._field_type , 'RECORD' )
56+ self .assertEqual (field ._mode , 'NULLABLE' )
57+ self .assertIsNone (field ._description )
58+ self .assertEqual (len (field ._fields ), 2 )
59+ self .assertIs (field ._fields [0 ], sub_field1 )
60+ self .assertIs (field ._fields [1 ], sub_field2 )
61+
62+ def test_name_property (self ):
63+ name = 'lemon-ness'
64+ schema_field = self ._make_one (name , 'INTEGER' )
65+ self .assertIs (schema_field .name , name )
66+
67+ def test_field_type_property (self ):
68+ field_type = 'BOOLEAN'
69+ schema_field = self ._make_one ('whether' , field_type )
70+ self .assertIs (schema_field .field_type , field_type )
71+
72+ def test_mode_property (self ):
73+ mode = 'REPEATED'
74+ schema_field = self ._make_one ('again' , 'FLOAT' , mode = mode )
75+ self .assertIs (schema_field .mode , mode )
76+
77+ def test_description_property (self ):
78+ description = 'It holds some data.'
79+ schema_field = self ._make_one (
80+ 'do' , 'TIMESTAMP' , description = description )
81+ self .assertIs (schema_field .description , description )
82+
83+ def test_fields_property (self ):
84+ sub_field1 = self ._make_one ('one' , 'STRING' )
85+ sub_field2 = self ._make_one ('fish' , 'INTEGER' )
86+ fields = (sub_field1 , sub_field2 )
87+ schema_field = self ._make_one ('boat' , 'RECORD' , fields = fields )
88+ self .assertIs (schema_field .fields , fields )
89+
90+ def test___eq___wrong_type (self ):
91+ field = self ._make_one ('test' , 'STRING' )
92+ other = object ()
93+ self .assertNotEqual (field , other )
94+ self .assertIs (field .__eq__ (other ), NotImplemented )
6695
6796 def test___eq___name_mismatch (self ):
6897 field = self ._make_one ('test' , 'STRING' )
@@ -111,3 +140,46 @@ def test___eq___hit_w_fields(self):
111140 field = self ._make_one ('test' , 'RECORD' , fields = [sub1 , sub2 ])
112141 other = self ._make_one ('test' , 'RECORD' , fields = [sub1 , sub2 ])
113142 self .assertEqual (field , other )
143+
144+ def test___ne___wrong_type (self ):
145+ field = self ._make_one ('toast' , 'INTEGER' )
146+ other = object ()
147+ self .assertNotEqual (field , other )
148+ self .assertIs (field .__ne__ (other ), NotImplemented )
149+
150+ def test___ne___same_value (self ):
151+ field1 = self ._make_one ('test' , 'TIMESTAMP' , mode = 'REPEATED' )
152+ field2 = self ._make_one ('test' , 'TIMESTAMP' , mode = 'REPEATED' )
153+ # unittest ``assertEqual`` uses ``==`` not ``!=``.
154+ comparison_val = (field1 != field2 )
155+ self .assertFalse (comparison_val )
156+
157+ def test___ne___different_values (self ):
158+ field1 = self ._make_one (
159+ 'test1' , 'FLOAT' , mode = 'REPEATED' , description = 'Not same' )
160+ field2 = self ._make_one (
161+ 'test2' , 'FLOAT' , mode = 'NULLABLE' , description = 'Knot saym' )
162+ self .assertNotEqual (field1 , field2 )
163+
164+ def test___hash__set_equality (self ):
165+ sub1 = self ._make_one ('sub1' , 'STRING' )
166+ sub2 = self ._make_one ('sub2' , 'STRING' )
167+ field1 = self ._make_one ('test' , 'RECORD' , fields = [sub1 ])
168+ field2 = self ._make_one ('test' , 'RECORD' , fields = [sub2 ])
169+ set_one = {field1 , field2 }
170+ set_two = {field1 , field2 }
171+ self .assertEqual (set_one , set_two )
172+
173+ def test___hash__not_equals (self ):
174+ sub1 = self ._make_one ('sub1' , 'STRING' )
175+ sub2 = self ._make_one ('sub2' , 'STRING' )
176+ field1 = self ._make_one ('test' , 'RECORD' , fields = [sub1 ])
177+ field2 = self ._make_one ('test' , 'RECORD' , fields = [sub2 ])
178+ set_one = {field1 }
179+ set_two = {field2 }
180+ self .assertNotEqual (set_one , set_two )
181+
182+ def test___repr__ (self ):
183+ field1 = self ._make_one ('field1' , 'STRING' )
184+ expected = "SchemaField('field1', 'string', 'NULLABLE', None, ())"
185+ self .assertEqual (repr (field1 ), expected )
0 commit comments