| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,49 +1,136 @@ | |||
| 1 | - import calendar | ||
| 2 | - from datetime import datetime | ||
| 3 | - import time | ||
| 4 | - | ||
| 5 | 1 | import unittest2 | |
| 6 | 2 | ||
| 7 | - from gcloud.datastore import helpers | ||
| 8 | - from gcloud.datastore.key import Key | ||
| 9 | - | ||
| 10 | - | ||
| 11 | - class TestHelpers(unittest2.TestCase): | ||
| 12 | - | ||
| 13 | - def test_get_protobuf_attribute(self): | ||
| 14 | - mapping = ( | ||
| 15 | - (str(), 'string_value'), | ||
| 16 | - (unicode(), 'string_value'), | ||
| 17 | - (int(), 'integer_value'), | ||
| 18 | - (long(), 'integer_value'), | ||
| 19 | - (float(), 'double_value'), | ||
| 20 | - (bool(), 'boolean_value'), | ||
| 21 | - (datetime.now(), 'timestamp_microseconds_value'), | ||
| 22 | - (Key(), 'key_value'), | ||
| 23 | - ) | ||
| 24 | - | ||
| 25 | - for test_value, expected_name in mapping: | ||
| 26 | - actual_name, _ = helpers.get_protobuf_attribute_and_value(test_value) | ||
| 27 | - self.assertEqual(expected_name, actual_name, | ||
| 28 | - 'Test value "%s" expected %s, got %s' % ( | ||
| 29 | - test_value, expected_name, actual_name)) | ||
| 30 | - | ||
| 31 | - def test_get_protobuf_value(self): | ||
| 32 | - now = datetime.utcnow() | ||
| 33 | - | ||
| 34 | - mapping = ( | ||
| 35 | - (str('string'), 'string'), | ||
| 36 | - (unicode('string'), 'string'), | ||
| 37 | - (int(), int()), | ||
| 38 | - (long(), int()), | ||
| 39 | - (float(), float()), | ||
| 40 | - (bool(), bool()), | ||
| 41 | - (now, long(calendar.timegm(now.timetuple()) * 1e6 + now.microsecond)), | ||
| 42 | - (Key(), Key().to_protobuf()), | ||
| 43 | - ) | ||
| 44 | - | ||
| 45 | - for test_value, expected_value in mapping: | ||
| 46 | - _, actual_value = helpers.get_protobuf_attribute_and_value(test_value) | ||
| 47 | - self.assertEqual(expected_value, actual_value, | ||
| 48 | - 'Test value "%s" expected %s, got %s.' % ( | ||
| 49 | - test_value, expected_value, actual_value)) | ||
| 3 | + | ||
| 4 | + class Test_get_protobuf_attribute_and_value(unittest2.TestCase): | ||
| 5 | + | ||
| 6 | + def _callFUT(self, val): | ||
| 7 | + from gcloud.datastore.helpers import get_protobuf_attribute_and_value | ||
| 8 | + return get_protobuf_attribute_and_value(val) | ||
| 9 | + | ||
| 10 | + def test_datetime_naive(self): | ||
| 11 | + import calendar | ||
| 12 | + import datetime | ||
| 13 | + import pytz | ||
| 14 | + naive = datetime.datetime(2014, 9, 16, 10, 19, 32, 4375) # no zone | ||
| 15 | + utc = datetime.datetime(2014, 9, 16, 10, 19, 32, 4375, pytz.utc) | ||
| 16 | + name, value = self._callFUT(naive) | ||
| 17 | + self.assertEqual(name, 'timestamp_microseconds_value') | ||
| 18 | + self.assertEqual(value / 1000000, calendar.timegm(utc.timetuple())) | ||
| 19 | + self.assertEqual(value % 1000000, 4375) | ||
| 20 | + | ||
| 21 | + def test_datetime_w_zone(self): | ||
| 22 | + import calendar | ||
| 23 | + import datetime | ||
| 24 | + import pytz | ||
| 25 | + utc = datetime.datetime(2014, 9, 16, 10, 19, 32, 4375, pytz.utc) | ||
| 26 | + name, value = self._callFUT(utc) | ||
| 27 | + self.assertEqual(name, 'timestamp_microseconds_value') | ||
| 28 | + self.assertEqual(value / 1000000, calendar.timegm(utc.timetuple())) | ||
| 29 | + self.assertEqual(value % 1000000, 4375) | ||
| 30 | + | ||
| 31 | + def test_key(self): | ||
| 32 | + from gcloud.datastore.dataset import Dataset | ||
| 33 | + from gcloud.datastore.key import Key | ||
| 34 | + _DATASET = 'DATASET' | ||
| 35 | + _KIND = 'KIND' | ||
| 36 | + _ID = 1234 | ||
| 37 | + _PATH = [{'kind': _KIND, 'id': _ID}] | ||
| 38 | + key = Key(dataset=Dataset(_DATASET), path=_PATH) | ||
| 39 | + name, value = self._callFUT(key) | ||
| 40 | + self.assertEqual(name, 'key_value') | ||
| 41 | + self.assertEqual(value, key.to_protobuf()) | ||
| 42 | + | ||
| 43 | + def test_bool(self): | ||
| 44 | + name, value = self._callFUT(False) | ||
| 45 | + self.assertEqual(name, 'boolean_value') | ||
| 46 | + self.assertEqual(value, False) | ||
| 47 | + | ||
| 48 | + def test_float(self): | ||
| 49 | + name, value = self._callFUT(3.1415926) | ||
| 50 | + self.assertEqual(name, 'double_value') | ||
| 51 | + self.assertEqual(value, 3.1415926) | ||
| 52 | + | ||
| 53 | + def test_int(self): | ||
| 54 | + name, value = self._callFUT(42) | ||
| 55 | + self.assertEqual(name, 'integer_value') | ||
| 56 | + self.assertEqual(value, 42) | ||
| 57 | + | ||
| 58 | + def test_long(self): | ||
| 59 | + must_be_long = 1 << 63 | ||
| 60 | + name, value = self._callFUT(must_be_long) | ||
| 61 | + self.assertEqual(name, 'integer_value') | ||
| 62 | + self.assertEqual(value, must_be_long) | ||
| 63 | + | ||
| 64 | + def test_native_str(self): | ||
| 65 | + name, value = self._callFUT('str') | ||
| 66 | + self.assertEqual(name, 'string_value') | ||
| 67 | + self.assertEqual(value, 'str') | ||
| 68 | + | ||
| 69 | + def test_unicode(self): | ||
| 70 | + name, value = self._callFUT(u'str') | ||
| 71 | + self.assertEqual(name, 'string_value') | ||
| 72 | + self.assertEqual(value, u'str') | ||
| 73 | + | ||
| 74 | + | ||
| 75 | + class Test_get_value_from_protobuf(unittest2.TestCase): | ||
| 76 | + | ||
| 77 | + def _callFUT(self, pb): | ||
| 78 | + from gcloud.datastore.helpers import get_value_from_protobuf | ||
| 79 | + return get_value_from_protobuf(pb) | ||
| 80 | + | ||
| 81 | + def _makePB(self, attr_name, value): | ||
| 82 | + from gcloud.datastore.datastore_v1_pb2 import Property | ||
| 83 | + prop = Property() | ||
| 84 | + setattr(prop.value, attr_name, value) | ||
| 85 | + return prop | ||
| 86 | + | ||
| 87 | + def test_datetime(self): | ||
| 88 | + import calendar | ||
| 89 | + import datetime | ||
| 90 | + import pytz | ||
| 91 | + naive = datetime.datetime(2014, 9, 16, 10, 19, 32, 4375) # no zone | ||
| 92 | + utc = datetime.datetime(2014, 9, 16, 10, 19, 32, 4375, pytz.utc) | ||
| 93 | + micros = (calendar.timegm(utc.timetuple()) * 1000000) + 4375 | ||
| 94 | + pb = self._makePB('timestamp_microseconds_value', micros) | ||
| 95 | + # self.assertEqual(self._callFUT(pb), utc) XXX | ||
| 96 | + # see https://github.com/GoogleCloudPlatform/gcloud-python/issues/131 | ||
| 97 | + self.assertEqual(self._callFUT(pb), naive) | ||
| 98 | + | ||
| 99 | + def test_key(self): | ||
| 100 | + from gcloud.datastore.datastore_v1_pb2 import Property | ||
| 101 | + from gcloud.datastore.dataset import Dataset | ||
| 102 | + from gcloud.datastore.key import Key | ||
| 103 | + _DATASET = 'DATASET' | ||
| 104 | + _KIND = 'KIND' | ||
| 105 | + _ID = 1234 | ||
| 106 | + _PATH = [{'kind': _KIND, 'id': _ID}] | ||
| 107 | + pb = Property() | ||
| 108 | + expected = Key(dataset=Dataset(_DATASET), path=_PATH).to_protobuf() | ||
| 109 | + pb.value.key_value.CopyFrom(expected) | ||
| 110 | + found = self._callFUT(pb) | ||
| 111 | + self.assertEqual(found.to_protobuf(), expected) | ||
| 112 | + | ||
| 113 | + def test_bool(self): | ||
| 114 | + pb = self._makePB('boolean_value', False) | ||
| 115 | + self.assertEqual(self._callFUT(pb), False) | ||
| 116 | + | ||
| 117 | + def test_float(self): | ||
| 118 | + pb = self._makePB('double_value', 3.1415926) | ||
| 119 | + self.assertEqual(self._callFUT(pb), 3.1415926) | ||
| 120 | + | ||
| 121 | + def test_int(self): | ||
| 122 | + pb = self._makePB('integer_value', 42) | ||
| 123 | + self.assertEqual(self._callFUT(pb), 42) | ||
| 124 | + | ||
| 125 | + def test_native_str(self): | ||
| 126 | + pb = self._makePB('string_value', 'str') | ||
| 127 | + self.assertEqual(self._callFUT(pb), 'str') | ||
| 128 | + | ||
| 129 | + def test_unicode(self): | ||
| 130 | + pb = self._makePB('string_value', u'str') | ||
| 131 | + self.assertEqual(self._callFUT(pb), u'str') | ||
| 132 | + | ||
| 133 | + def test_unknown(self): | ||
| 134 | + from gcloud.datastore.datastore_v1_pb2 import Property | ||
| 135 | + pb = Property() | ||
| 136 | + self.assertEqual(self._callFUT(pb), None) # XXX desirable? | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments