123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- //===- MsgPackDocumentTest.cpp --------------------------------------------===//
- //
- // The LLVM Compiler Infrastructure
- //
- // This file is distributed under the University of Illinois Open Source
- // License. See LICENSE.TXT for details.
- //
- //===----------------------------------------------------------------------===//
- #include "llvm/BinaryFormat/MsgPackDocument.h"
- #include "gtest/gtest.h"
- using namespace llvm;
- using namespace msgpack;
- TEST(MsgPackDocument, TestReadInt) {
- Document Doc;
- bool Ok = Doc.readFromBlob(StringRef("\xd0\x00", 2), /*Multi=*/false);
- ASSERT_TRUE(Ok);
- ASSERT_EQ(Doc.getRoot().getKind(), Type::Int);
- ASSERT_EQ(Doc.getRoot().getInt(), 0);
- }
- TEST(MsgPackDocument, TestReadArray) {
- Document Doc;
- bool Ok = Doc.readFromBlob(StringRef("\x92\xd0\x01\xc0"), /*Multi=*/false);
- ASSERT_TRUE(Ok);
- ASSERT_EQ(Doc.getRoot().getKind(), Type::Array);
- auto A = Doc.getRoot().getArray();
- ASSERT_EQ(A.size(), 2u);
- auto SI = A[0];
- ASSERT_EQ(SI.getKind(), Type::Int);
- ASSERT_EQ(SI.getInt(), 1);
- auto SN = A[1];
- ASSERT_EQ(SN.getKind(), Type::Nil);
- }
- TEST(MsgPackDocument, TestReadMap) {
- Document Doc;
- bool Ok = Doc.readFromBlob(StringRef("\x82\xa3"
- "foo"
- "\xd0\x01\xa3"
- "bar"
- "\xd0\x02"),
- /*Multi=*/false);
- ASSERT_TRUE(Ok);
- ASSERT_EQ(Doc.getRoot().getKind(), Type::Map);
- auto M = Doc.getRoot().getMap();
- ASSERT_EQ(M.size(), 2u);
- auto FooS = M["foo"];
- ASSERT_EQ(FooS.getKind(), Type::Int);
- ASSERT_EQ(FooS.getInt(), 1);
- auto BarS = M["bar"];
- ASSERT_EQ(BarS.getKind(), Type::Int);
- ASSERT_EQ(BarS.getInt(), 2);
- }
- TEST(MsgPackDocument, TestWriteInt) {
- Document Doc;
- Doc.getRoot() = Doc.getNode(int64_t(1));
- std::string Buffer;
- Doc.writeToBlob(Buffer);
- ASSERT_EQ(Buffer, "\x01");
- }
- TEST(MsgPackDocument, TestWriteArray) {
- Document Doc;
- auto A = Doc.getRoot().getArray(/*Convert=*/true);
- A.push_back(Doc.getNode(int64_t(1)));
- A.push_back(Doc.getNode());
- std::string Buffer;
- Doc.writeToBlob(Buffer);
- ASSERT_EQ(Buffer, "\x92\x01\xc0");
- }
- TEST(MsgPackDocument, TestWriteMap) {
- Document Doc;
- auto M = Doc.getRoot().getMap(/*Convert=*/true);
- M["foo"] = Doc.getNode(int64_t(1));
- M["bar"] = Doc.getNode(int64_t(2));
- std::string Buffer;
- Doc.writeToBlob(Buffer);
- ASSERT_EQ(Buffer, "\x82\xa3"
- "bar"
- "\x02\xa3"
- "foo"
- "\x01");
- }
- TEST(MsgPackDocument, TestOutputYAMLArray) {
- Document Doc;
- auto A = Doc.getRoot().getArray(/*Convert=*/true);
- A.push_back(Doc.getNode(int64_t(1)));
- A.push_back(Doc.getNode(int64_t(2)));
- std::string Buffer;
- raw_string_ostream OStream(Buffer);
- Doc.toYAML(OStream);
- ASSERT_EQ(OStream.str(), "---\n- 1\n- 2\n...\n");
- }
- TEST(MsgPackDocument, TestInputYAMLArray) {
- Document Doc;
- bool Ok = Doc.fromYAML("---\n- !int 0x1\n- !str 2\n...\n");
- ASSERT_TRUE(Ok);
- ASSERT_EQ(Doc.getRoot().getKind(), Type::Array);
- auto A = Doc.getRoot().getArray();
- ASSERT_EQ(A.size(), 2u);
- auto SI = A[0];
- ASSERT_EQ(SI.getKind(), Type::UInt);
- ASSERT_EQ(SI.getUInt(), 1u);
- auto SS = A[1];
- ASSERT_EQ(SS.getKind(), Type::String);
- ASSERT_EQ(SS.getString(), "2");
- }
- TEST(MsgPackDocument, TestOutputYAMLMap) {
- Document Doc;
- auto M = Doc.getRoot().getMap(/*Convert=*/true);
- M["foo"] = Doc.getNode(int64_t(1));
- M["bar"] = Doc.getNode(uint64_t(2));
- auto N = Doc.getMapNode();
- M["qux"] = N;
- N["baz"] = Doc.getNode(true);
- std::string Buffer;
- raw_string_ostream OStream(Buffer);
- Doc.toYAML(OStream);
- ASSERT_EQ(OStream.str(), "---\n"
- "bar: 2\n"
- "foo: 1\n"
- "qux:\n"
- " baz: true\n"
- "...\n");
- }
- TEST(MsgPackDocument, TestOutputYAMLMapHex) {
- Document Doc;
- Doc.setHexMode();
- auto M = Doc.getRoot().getMap(/*Convert=*/true);
- M["foo"] = Doc.getNode(int64_t(1));
- M["bar"] = Doc.getNode(uint64_t(2));
- auto N = Doc.getMapNode();
- M["qux"] = N;
- N["baz"] = Doc.getNode(true);
- std::string Buffer;
- raw_string_ostream OStream(Buffer);
- Doc.toYAML(OStream);
- ASSERT_EQ(OStream.str(), "---\n"
- "bar: 0x2\n"
- "foo: 1\n"
- "qux:\n"
- " baz: true\n"
- "...\n");
- }
- TEST(MsgPackDocument, TestInputYAMLMap) {
- Document Doc;
- bool Ok = Doc.fromYAML("---\nfoo: !int 0x1\nbaz: !str 2\n...\n");
- ASSERT_TRUE(Ok);
- ASSERT_EQ(Doc.getRoot().getKind(), Type::Map);
- auto M = Doc.getRoot().getMap();
- ASSERT_EQ(M.size(), 2u);
- auto SI = M["foo"];
- ASSERT_EQ(SI.getKind(), Type::UInt);
- ASSERT_EQ(SI.getUInt(), 1u);
- auto SS = M["baz"];
- ASSERT_EQ(SS.getKind(), Type::String);
- ASSERT_EQ(SS.getString(), "2");
- }
|