this repo has no description
at trunk 195 lines 5.7 kB view raw
1// Copyright (c) Facebook, Inc. and its affiliates. (http://www.facebook.com) 2#include "Python.h" 3#include "gtest/gtest.h" 4 5#include "capi-fixture.h" 6#include "capi-testing.h" 7#include "datetime.h" 8 9namespace py { 10namespace testing { 11 12using DateTimeExtensionApiTest = ExtensionApi; 13 14TEST_F(DateTimeExtensionApiTest, PyDateTimeAPIReturnsStructIfFound) { 15 ASSERT_EQ(PyDateTimeAPI, nullptr); 16 PyDateTime_IMPORT; 17 ASSERT_NE(PyDateTimeAPI, nullptr); 18} 19 20TEST_F(DateTimeExtensionApiTest, PyDateTimeCheckWithDateTimeObjectReturnsTrue) { 21 PyRun_SimpleString(R"( 22import datetime 23instance = datetime.datetime(1, 2, 3) 24)"); 25 PyObjectPtr instance(mainModuleGet("instance")); 26 ASSERT_NE(instance, nullptr); 27 PyDateTime_IMPORT; 28 EXPECT_TRUE(PyDateTime_Check(instance)); 29} 30 31TEST_F(DateTimeExtensionApiTest, 32 PyDateTimeCheckWithDateTimeSubclassReturnsTrue) { 33 PyRun_SimpleString(R"( 34import datetime 35class C(datetime.datetime): 36 pass 37instance = C(1, 2, 3) 38)"); 39 PyObjectPtr instance(mainModuleGet("instance")); 40 ASSERT_NE(instance, nullptr); 41 PyDateTime_IMPORT; 42 EXPECT_TRUE(PyDateTime_Check(instance)); 43} 44 45TEST_F(DateTimeExtensionApiTest, PyDateTimeCheckWithNonDateTimeReturnsFalse) { 46 PyObjectPtr instance(PyLong_FromLong(100)); 47 ASSERT_NE(instance, nullptr); 48 PyDateTime_IMPORT; 49 EXPECT_FALSE(PyDateTime_Check(instance)); 50} 51 52TEST_F(DateTimeExtensionApiTest, 53 PyDateTimeFromDateAndTimeReturnsDateTimeObject) { 54 PyDateTime_IMPORT; 55 PyObjectPtr result(PyDateTime_FromDateAndTime(1, 2, 3, 4, 5, 6, 10)); 56 ASSERT_NE(result, nullptr); 57 EXPECT_TRUE(PyDateTime_Check(result)); 58} 59 60TEST_F(DateTimeExtensionApiTest, PyDateCheckWithDateObjectReturnsTrue) { 61 PyRun_SimpleString(R"( 62import datetime 63instance = datetime.date(1, 2, 3) 64)"); 65 PyObjectPtr instance(mainModuleGet("instance")); 66 ASSERT_NE(instance, nullptr); 67 PyDateTime_IMPORT; 68 EXPECT_TRUE(PyDate_Check(instance)); 69} 70 71TEST_F(DateTimeExtensionApiTest, PyDateCheckWithDateSubclassReturnsTrue) { 72 PyRun_SimpleString(R"( 73import datetime 74class C(datetime.date): 75 pass 76instance = C(1, 2, 3) 77)"); 78 PyObjectPtr instance(mainModuleGet("instance")); 79 ASSERT_NE(instance, nullptr); 80 PyDateTime_IMPORT; 81 EXPECT_TRUE(PyDate_Check(instance)); 82} 83 84TEST_F(DateTimeExtensionApiTest, PyDateCheckWithNonDateReturnsFalse) { 85 PyObjectPtr instance(PyLong_FromLong(100)); 86 ASSERT_NE(instance, nullptr); 87 PyDateTime_IMPORT; 88 EXPECT_FALSE(PyDate_Check(instance)); 89} 90 91TEST_F(DateTimeExtensionApiTest, PyDateFromDateReturnsDateObject) { 92 PyDateTime_IMPORT; 93 PyObjectPtr result(PyDate_FromDate(1, 2, 3)); 94 ASSERT_NE(result, nullptr); 95 EXPECT_TRUE(PyDate_Check(result)); 96} 97 98TEST_F(DateTimeExtensionApiTest, PyDeltaCheckWithDeltaObjectReturnsTrue) { 99 PyRun_SimpleString(R"( 100import datetime 101instance = datetime.date(1, 2, 3) - datetime.date(1, 2, 3) 102)"); 103 PyObjectPtr instance(mainModuleGet("instance")); 104 ASSERT_NE(instance, nullptr); 105 PyDateTime_IMPORT; 106 EXPECT_TRUE(PyDelta_Check(instance)); 107} 108 109TEST_F(DateTimeExtensionApiTest, PyDeltaCheckWithDeltaSubclassReturnsTrue) { 110 PyRun_SimpleString(R"( 111import datetime 112class C(datetime.timedelta): 113 pass 114instance = C(1, 2, 3) 115)"); 116 PyObjectPtr instance(mainModuleGet("instance")); 117 ASSERT_NE(instance, nullptr); 118 PyDateTime_IMPORT; 119 EXPECT_TRUE(PyDelta_Check(instance)); 120} 121 122TEST_F(DateTimeExtensionApiTest, PyDeltaCheckWithNonDeltaReturnsFalse) { 123 PyObjectPtr instance(PyLong_FromLong(100)); 124 ASSERT_NE(instance, nullptr); 125 PyDateTime_IMPORT; 126 EXPECT_FALSE(PyDelta_Check(instance)); 127} 128 129TEST_F(DateTimeExtensionApiTest, PyDeltaFromDSUReturnsObject) { 130 PyDateTime_IMPORT; 131 PyObjectPtr result(PyDelta_FromDSU(1, 2, 500)); 132 ASSERT_NE(result, nullptr); 133 EXPECT_TRUE(PyDelta_Check(result)); 134} 135 136TEST_F(DateTimeExtensionApiTest, PyDateTimeGETsEveryUnitOfTime) { 137 PyRun_SimpleString(R"( 138import datetime 139instance = datetime.datetime(1990, 2, 3, 4, 5, 6, 10000) 140)"); 141 PyObject* instance = mainModuleGet("instance"); 142 ASSERT_NE(instance, nullptr); 143 PyDateTime_IMPORT; 144 EXPECT_EQ(PyDateTime_GET_YEAR(instance), 1990); 145 EXPECT_EQ(PyDateTime_GET_MONTH(instance), 2); 146 EXPECT_EQ(PyDateTime_GET_DAY(instance), 3); 147 EXPECT_EQ(PyDateTime_DATE_GET_HOUR(instance), 4); 148 EXPECT_EQ(PyDateTime_DATE_GET_MINUTE(instance), 5); 149 EXPECT_EQ(PyDateTime_DATE_GET_SECOND(instance), 6); 150 EXPECT_EQ(PyDateTime_DATE_GET_MICROSECOND(instance), 10000); 151 Py_DECREF(instance); 152} 153 154TEST_F(DateTimeExtensionApiTest, PyDateTimeTimeGETsEveryUnitOfTime) { 155 PyRun_SimpleString(R"( 156import datetime 157instance = datetime.time(1, 40, 50, 999) 158)"); 159 PyObject* instance = mainModuleGet("instance"); 160 ASSERT_NE(instance, nullptr); 161 PyDateTime_IMPORT; 162 EXPECT_EQ(PyDateTime_TIME_GET_HOUR(instance), 1); 163 EXPECT_EQ(PyDateTime_TIME_GET_MINUTE(instance), 40); 164 EXPECT_EQ(PyDateTime_TIME_GET_SECOND(instance), 50); 165 EXPECT_EQ(PyDateTime_TIME_GET_MICROSECOND(instance), 999); 166 Py_DECREF(instance); 167} 168 169TEST_F(DateTimeExtensionApiTest, PyDeltaGETsEveryUnitOfTime) { 170 PyRun_SimpleString(R"( 171import datetime 172instance = datetime.timedelta(1, 2, 3) 173)"); 174 PyObject* instance = mainModuleGet("instance"); 175 ASSERT_NE(instance, nullptr); 176 PyDateTime_IMPORT; 177 EXPECT_EQ(PyDateTime_DELTA_GET_DAYS(instance), 1); 178 EXPECT_EQ(PyDateTime_DELTA_GET_SECONDS(instance), 2); 179 EXPECT_EQ(PyDateTime_DELTA_GET_MICROSECONDS(instance), 3); 180 Py_DECREF(instance); 181} 182 183TEST_F(DateTimeExtensionApiTest, PyTimeCheckWithTimeObjectReturnsTrue) { 184 PyRun_SimpleString(R"( 185import datetime 186instance = datetime.time(1, 2, 3) 187)"); 188 PyObjectPtr instance(mainModuleGet("instance")); 189 ASSERT_NE(instance, nullptr); 190 PyDateTime_IMPORT; 191 EXPECT_TRUE(PyTime_Check(instance)); 192} 193 194} // namespace testing 195} // namespace py