Beispiel #1
0
TEST(DictionarySerializationTest, SelfReference) {
	AmfItemPtr ptr(AmfDictionary(false, false));
	ptr.as<AmfDictionary>().values[AmfItemPtr(AmfString("x"))] = ptr;

	SerializationContext ctx;
	isEqual({
		0x11,
		0x03,
		0x00,
		0x06, 0x03, 0x78,
		0x11, 0x00
	}, ptr->serialize(ctx));
}
TEST(SerializationContext, Pointer) {
	SerializationContext ctx;

	ASSERT_THROW(ctx.getPointer<AmfInteger>(0), std::out_of_range);

	ctx.addPointer(AmfItemPtr(AmfNull()));
	ASSERT_EQ(AmfNull(), ctx.getPointer<AmfNull>(0).as<AmfNull>());
	ASSERT_EQ(AmfNull(), ctx.getObject<AmfNull>(0));
	ASSERT_THROW(ctx.getPointer<AmfInteger>(0), std::invalid_argument);
	ASSERT_THROW(ctx.getObject<AmfInteger>(0), std::invalid_argument);
	ASSERT_THROW(ctx.getPointer<AmfNull>(1), std::out_of_range);
	ASSERT_THROW(ctx.getObject<AmfNull>(1), std::out_of_range);

	ctx.addObject(AmfInteger(11));
	ASSERT_EQ(AmfNull(), ctx.getPointer<AmfNull>(0).as<AmfNull>());
	ASSERT_EQ(AmfInteger(11), ctx.getPointer<AmfInteger>(1).as<AmfInteger>());
	ASSERT_EQ(AmfInteger(11), ctx.getObject<AmfInteger>(1));
	ASSERT_THROW(ctx.getPointer<AmfDouble>(1), std::invalid_argument);
	ASSERT_THROW(ctx.getObject<AmfDouble>(1), std::invalid_argument);
}
Beispiel #3
0
TEST(DictionaryDeserialization, SelfReference2) {
	v8 data {
		0x11,
		0x05,
		0x00,
			0x00,
			0x11, 0x00,
			0x11, 0x00,
			0x00
	};

	DeserializationContext ctx;
	auto it = data.cbegin();
	AmfItemPtr ptr = AmfDictionary::deserializePtr(it, data.cend(), ctx);
	AmfDictionary & d = ptr.as<AmfDictionary>();

	const AmfItemPtr& inner = d.values.at(AmfItemPtr(AmfUndefined()));
	EXPECT_EQ(ptr.get(), inner.get());

	// TODO: segfault due to AmfDictionaryHash
	// const AmfItemPtr& inner2 = d.values.at(ptr);
	// EXPECT_EQ(AmfUndefined(), inner2.as<AmfUndefined>());
}
	void setObject(size_t index, const T& object) {
		objects.at(index) = AmfItemPtr(new T(object));
	}
Beispiel #5
0
	void insert(const std::string key, const T& item) {
		static_assert(std::is_base_of<AmfItem, T>::value, "Elements must extend AmfItem");

		associative[key] = AmfItemPtr(new T(item));
	}
Beispiel #6
0
	AmfItemPtr& operator[](const T& item) {
		static_assert(std::is_base_of<AmfItem, T>::value, "Keys must extend AmfItem");
		return values[AmfItemPtr(new T(item))];
	}
Beispiel #7
0
	void addDynamicProperty(std::string name, const T& value) {
		dynamicProperties[name] = AmfItemPtr(new T(value));
	}
Beispiel #8
0
	void addSealedProperty(std::string name, const T& value) {
		traits.addAttribute(name);
		sealedProperties[name] = AmfItemPtr(new T(value));
	}