TEST(ObjectTests, BooleanObject) { ObjectPtr object = createObject(false); ASSERT_EQ(Object::BOOLEAN, object->getNativeType()); ASSERT_FALSE(object->isNil()); ASSERT_EQ(false, object->getBoolean()); ASSERT_EQ(0.f, object->getNumber()); ASSERT_STREQ("false", object->getString().c_str()); ASSERT_THROW(object->getUserdata(), ObjectConversionException); ASSERT_STREQ("false", object->getReadableString().c_str()); object = createObject(true); ASSERT_EQ(Object::BOOLEAN, object->getNativeType()); ASSERT_FALSE(object->isNil()); ASSERT_EQ(true, object->getBoolean()); ASSERT_EQ(1.f, object->getNumber()); ASSERT_STREQ("true", object->getString().c_str()); ASSERT_THROW(object->getUserdata(), ObjectConversionException); ASSERT_STREQ("true", object->getReadableString().c_str()); }
TEST(ObjectTests, NilObject) { ObjectPtr object = createObject(); ASSERT_EQ(Object::NIL, object->getNativeType()); ASSERT_TRUE(object->isNil()); ASSERT_EQ(false, object->getBoolean()); ASSERT_EQ(0.f, object->getNumber()); ASSERT_TRUE(object->getString().empty()); ASSERT_EQ(0, object->getUserdata()); ASSERT_STREQ("nil", object->getReadableString().c_str()); }
TEST(ObjectTests, UserdataObject) { void* memory = malloc(32); ObjectPtr object = createObject(memory); ASSERT_EQ(Object::USERDATA, object->getNativeType()); ASSERT_FALSE(object->isNil()); ASSERT_TRUE(object->getBoolean()); ASSERT_THROW(object->getNumber(), ObjectConversionException); // TODO: Check getString() ASSERT_EQ(memory, object->getUserdata()); // TODO: Check getReadableString() free(memory); }
TEST(ObjectTests, StringObject) { String value = "abcdefghijklmnopqrstuvwxyz1234567890"; RecordProperty("value", value); ObjectPtr object = createObject(value); ASSERT_EQ(Object::STRING, object->getNativeType()); ASSERT_FALSE(object->isNil()); ASSERT_TRUE(object->getBoolean()); ASSERT_THROW(object->getNumber(), ObjectConversionException); ASSERT_EQ(value, object->getString()); ASSERT_THROW(object->getUserdata(), ObjectConversionException); ASSERT_EQ(FORMAT("\"%s\"", value.c_str()), object->getReadableString()); }
TEST(ObjectTests, NumberObject) { Number low = -1000; Number high = 1000; Number value = low + static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / (high - low))); std::stringstream ss; ss << value; RecordProperty("value", ss.str()); ObjectPtr object = createObject(value); ASSERT_EQ(Object::NUMBER, object->getNativeType()); ASSERT_FALSE(object->isNil()); ASSERT_EQ(value == 0 ? false : true, object->getBoolean()); ASSERT_EQ(value, object->getNumber()); ASSERT_EQ(FORMAT("%f", value), object->getString()); ASSERT_THROW(object->getUserdata(), ObjectConversionException); ASSERT_EQ(FORMAT("%f", value), object->getReadableString()); }