@@ -497,6 +497,25 @@ def test_array(self):
497497 self .assertEqual (name , 'array_value' )
498498 self .assertTrue (value is values )
499499
500+ def test_geo_point (self ):
501+ from google .type import latlng_pb2
502+ from gcloud .datastore .helpers import GeoPoint
503+
504+ lat = 42.42
505+ lng = 99.0007
506+ geo_pt = GeoPoint (latitude = lat , longitude = lng )
507+ geo_pt_pb = latlng_pb2 .LatLng (latitude = lat , longitude = lng )
508+ name , value = self ._callFUT (geo_pt )
509+ self .assertEqual (name , 'geo_point_value' )
510+ self .assertEqual (value , geo_pt_pb )
511+
512+ def test_null (self ):
513+ from google .protobuf import struct_pb2
514+
515+ name , value = self ._callFUT (None )
516+ self .assertEqual (name , 'null_value' )
517+ self .assertEqual (value , struct_pb2 .NULL_VALUE )
518+
500519 def test_object (self ):
501520 self .assertRaises (ValueError , self ._callFUT , object ())
502521
@@ -586,11 +605,34 @@ def test_array(self):
586605 items = self ._callFUT (pb )
587606 self .assertEqual (items , ['Foo' , 'Bar' ])
588607
608+ def test_geo_point (self ):
609+ from google .type import latlng_pb2
610+ from gcloud .datastore ._generated import entity_pb2
611+ from gcloud .datastore .helpers import GeoPoint
612+
613+ lat = - 3.14
614+ lng = 13.37
615+ geo_pt_pb = latlng_pb2 .LatLng (latitude = lat , longitude = lng )
616+ pb = entity_pb2 .Value (geo_point_value = geo_pt_pb )
617+ result = self ._callFUT (pb )
618+ self .assertIsInstance (result , GeoPoint )
619+ self .assertEqual (result .latitude , lat )
620+ self .assertEqual (result .longitude , lng )
621+
622+ def test_null (self ):
623+ from google .protobuf import struct_pb2
624+ from gcloud .datastore ._generated import entity_pb2
625+
626+ pb = entity_pb2 .Value (null_value = struct_pb2 .NULL_VALUE )
627+ result = self ._callFUT (pb )
628+ self .assertIsNone (result )
629+
589630 def test_unknown (self ):
590631 from gcloud .datastore ._generated import entity_pb2
591632
592633 pb = entity_pb2 .Value ()
593- self .assertEqual (self ._callFUT (pb ), None )
634+ with self .assertRaises (ValueError ):
635+ self ._callFUT (pb )
594636
595637
596638class Test_set_protobuf_value (unittest2 .TestCase ):
@@ -627,23 +669,9 @@ def test_key(self):
627669 self .assertEqual (value , key .to_protobuf ())
628670
629671 def test_none (self ):
630- from gcloud .datastore .entity import Entity
631-
632- entity = Entity ()
633672 pb = self ._makePB ()
634-
635- self ._callFUT (pb , False )
636- self ._callFUT (pb , 3.1415926 )
637- self ._callFUT (pb , 42 )
638- self ._callFUT (pb , (1 << 63 ) - 1 )
639- self ._callFUT (pb , 'str' )
640- self ._callFUT (pb , b'str' )
641- self ._callFUT (pb , u'str' )
642- self ._callFUT (pb , entity )
643- self ._callFUT (pb , [u'a' , 0 , 3.14 ])
644-
645673 self ._callFUT (pb , None )
646- self .assertEqual (len ( pb .ListFields ()), 0 )
674+ self .assertEqual (pb .WhichOneof ( 'value_type' ), 'null_value' )
647675
648676 def test_bool (self ):
649677 pb = self ._makePB ()
@@ -733,6 +761,18 @@ def test_array(self):
733761 self .assertEqual (marshalled [1 ].integer_value , values [1 ])
734762 self .assertEqual (marshalled [2 ].double_value , values [2 ])
735763
764+ def test_geo_point (self ):
765+ from google .type import latlng_pb2
766+ from gcloud .datastore .helpers import GeoPoint
767+
768+ pb = self ._makePB ()
769+ lat = 9.11
770+ lng = 3.337
771+ geo_pt = GeoPoint (latitude = lat , longitude = lng )
772+ geo_pt_pb = latlng_pb2 .LatLng (latitude = lat , longitude = lng )
773+ self ._callFUT (pb , geo_pt )
774+ self .assertEqual (pb .geo_point_value , geo_pt_pb )
775+
736776
737777class Test__prepare_key_for_request (unittest2 .TestCase ):
738778
@@ -894,6 +934,60 @@ def test_array_value_partially_unset(self):
894934 self ._callFUT (value_pb , is_list = True )
895935
896936
937+ class TestGeoPoint (unittest2 .TestCase ):
938+
939+ def _getTargetClass (self ):
940+ from gcloud .datastore .helpers import GeoPoint
941+ return GeoPoint
942+
943+ def _makeOne (self , * args , ** kwargs ):
944+ return self ._getTargetClass ()(* args , ** kwargs )
945+
946+ def test_constructor (self ):
947+ lat = 81.2
948+ lng = 359.9999
949+ geo_pt = self ._makeOne (lat , lng )
950+ self .assertEqual (geo_pt .latitude , lat )
951+ self .assertEqual (geo_pt .longitude , lng )
952+
953+ def test_to_protobuf (self ):
954+ from google .type import latlng_pb2
955+
956+ lat = 0.0001
957+ lng = 20.03
958+ geo_pt = self ._makeOne (lat , lng )
959+ result = geo_pt .to_protobuf ()
960+ geo_pt_pb = latlng_pb2 .LatLng (latitude = lat , longitude = lng )
961+ self .assertEqual (result , geo_pt_pb )
962+
963+ def test___eq__ (self ):
964+ lat = 0.0001
965+ lng = 20.03
966+ geo_pt1 = self ._makeOne (lat , lng )
967+ geo_pt2 = self ._makeOne (lat , lng )
968+ self .assertEqual (geo_pt1 , geo_pt2 )
969+
970+ def test___eq__type_differ (self ):
971+ lat = 0.0001
972+ lng = 20.03
973+ geo_pt1 = self ._makeOne (lat , lng )
974+ geo_pt2 = object ()
975+ self .assertNotEqual (geo_pt1 , geo_pt2 )
976+
977+ def test___ne__same_value (self ):
978+ lat = 0.0001
979+ lng = 20.03
980+ geo_pt1 = self ._makeOne (lat , lng )
981+ geo_pt2 = self ._makeOne (lat , lng )
982+ comparison_val = (geo_pt1 != geo_pt2 )
983+ self .assertFalse (comparison_val )
984+
985+ def test___ne__ (self ):
986+ geo_pt1 = self ._makeOne (0.0 , 1.0 )
987+ geo_pt2 = self ._makeOne (2.0 , 3.0 )
988+ self .assertNotEqual (geo_pt1 , geo_pt2 )
989+
990+
897991class _Connection (object ):
898992
899993 _called_project = _called_key_pbs = _lookup_result = None
0 commit comments