1 #include <gtest/gtest.h>
4 #include "utilities/utils.h"
5 #include "utilities/xml2json.h"
7 TEST(xml2json, simple) {
9 std::stringstream inxml(
"<a/>");
10 auto j = xml2json::xml2json(inxml);
11 EXPECT_EQ(Utils::jsonToCanonicalStr(j), R
"({"a":null})");
14 std::stringstream inxml(R"(<a b="xxx"/>)");
15 auto j = xml2json::xml2json(inxml);
16 EXPECT_EQ(Utils::jsonToCanonicalStr(j), R
"({"a":{"@b":"xxx"}})");
19 std::stringstream inxml(R"(<a b="xxx" c="rrr"></a>)");
20 auto j = xml2json::xml2json(inxml);
21 EXPECT_EQ(Utils::jsonToCanonicalStr(j), R
"({"a":{"@b":"xxx","@c":"rrr"}})");
24 std::stringstream inxml("<a>xxx</a>");
25 auto j = xml2json::xml2json(inxml);
26 EXPECT_EQ(Utils::jsonToCanonicalStr(j), R
"({"a":"xxx"})");
29 std::stringstream inxml("<a><b>xxx</b></a>");
30 auto j = xml2json::xml2json(inxml);
31 EXPECT_EQ(Utils::jsonToCanonicalStr(j), R
"({"a":{"b":"xxx"}})");
34 std::stringstream inxml("<a><b>xxx</b><c>yyy</c></a>");
35 auto j = xml2json::xml2json(inxml);
36 EXPECT_EQ(Utils::jsonToCanonicalStr(j), R
"({"a":{"b":"xxx","c":"yyy"}})");
39 std::stringstream inxml(R"(<a xxx="1">yy</a>)");
40 auto j = xml2json::xml2json(inxml);
41 EXPECT_EQ(Utils::jsonToCanonicalStr(j), R
"({"a":{"#text":"yy","@xxx":"1"}})");
44 std::stringstream inxml(R"(<a><b>1</b><c>xx</c><b>2</b></a>)");
45 auto j = xml2json::xml2json(inxml);
46 EXPECT_EQ(Utils::jsonToCanonicalStr(j), R
"({"a":{"b":["1","2"],"c":"xx"}})");
50 static const std::string example_manifest = R
"(
51 <?xml version="1.0" encoding="UTF-8"?>
53 <remote fetch="https://github.com" name="github" pushurl="ssh://git@github.com"/>
54 <remote fetch="git://git.openembedded.org/" name="openembedded"/>
55 <remote fetch="https://git.yoctoproject.org/git/" name="yocto"/>
57 <default remote="github" revision="master"/>
59 <project name="advancedtelematic/meta-updater" path="meta-updater" revision="6e1c9cf5cc59437ce07f5aec2dc62d665d218bdb" upstream="master"/>
60 <project name="advancedtelematic/meta-updater-minnowboard" path="meta-updater-minnowboard" revision="c822d05f860c3a2437236696b22ef7536c0a1311" upstream="master"/>
61 <project name="advancedtelematic/meta-updater-qemux86-64" path="meta-updater-qemux86-64" revision="162d1378659343a3ad34569c1315babe7246ec86" upstream="master"/>
62 <project name="advancedtelematic/meta-updater-raspberrypi" path="meta-updater-raspberrypi" revision="501156e6d12e3207a5acb611984dce1856a7729c" upstream="master"/>
63 <project name="meta-intel" remote="yocto" revision="eacd8eb9f762c90cec2825736e8c4d483966c4d4" upstream="master"/>
64 <project name="meta-openembedded" remote="openembedded" revision="18506b797bcfe162999223b79919e7c730875bb4" upstream="master"/>
65 <project name="meta-raspberrypi" remote="yocto" revision="254c9366b9c3309db6dc07beb80aba55e0c87f94" upstream="master"/>
66 <project name="poky" remote="yocto" revision="3a751d5564fc6ee9aef225653cc7b8630fd25a35" upstream="master"/>
67 <project name="ricardosalveti/meta-updater-riscv" path="meta-updater-riscv" revision="8164a21c04a7de91f90ada763104063540a84961" upstream="master"/>
68 <project name="riscv/meta-riscv" path="meta-riscv" revision="0ba537b9270046b1c08d2b2f1cc9a9ca96ea0328" upstream="master"/>
72 static const std::string example_json =
73 R
"({"manifest":{"default":{"@remote":"github","@revision":"master"},"project":[{"@name":"advancedtelematic/meta-updater","@path":"meta-updater","@revision":"6e1c9cf5cc59437ce07f5aec2dc62d665d218bdb","@upstream":"master"},{"@name":"advancedtelematic/meta-updater-minnowboard","@path":"meta-updater-minnowboard","@revision":"c822d05f860c3a2437236696b22ef7536c0a1311","@upstream":"master"},{"@name":"advancedtelematic/meta-updater-qemux86-64","@path":"meta-updater-qemux86-64","@revision":"162d1378659343a3ad34569c1315babe7246ec86","@upstream":"master"},{"@name":"advancedtelematic/meta-updater-raspberrypi","@path":"meta-updater-raspberrypi","@revision":"501156e6d12e3207a5acb611984dce1856a7729c","@upstream":"master"},{"@name":"meta-intel","@remote":"yocto","@revision":"eacd8eb9f762c90cec2825736e8c4d483966c4d4","@upstream":"master"},{"@name":"meta-openembedded","@remote":"openembedded","@revision":"18506b797bcfe162999223b79919e7c730875bb4","@upstream":"master"},{"@name":"meta-raspberrypi","@remote":"yocto","@revision":"254c9366b9c3309db6dc07beb80aba55e0c87f94","@upstream":"master"},{"@name":"poky","@remote":"yocto","@revision":"3a751d5564fc6ee9aef225653cc7b8630fd25a35","@upstream":"master"},{"@name":"ricardosalveti/meta-updater-riscv","@path":"meta-updater-riscv","@revision":"8164a21c04a7de91f90ada763104063540a84961","@upstream":"master"},{"@name":"riscv/meta-riscv","@path":"meta-riscv","@revision":"0ba537b9270046b1c08d2b2f1cc9a9ca96ea0328","@upstream":"master"}],"remote":[{"@fetch":"https://github.com","@name":"github","@pushurl":"ssh://git@github.com"},{"@fetch":"git://git.openembedded.org/","@name":"openembedded"},{"@fetch":"https://git.yoctoproject.org/git/","@name":"yocto"}]}})";
75 TEST(xml2json, manifest) {
76 std::stringstream inxml(example_manifest);
77 auto j = xml2json::xml2json(inxml);
78 EXPECT_EQ(Utils::jsonToCanonicalStr(j), example_json);
81 TEST(xml2json, bad_input) {
84 std::stringstream inxml(
"<a");
85 EXPECT_THROW(xml2json::xml2json(inxml), std::runtime_error);
89 std::stringstream inxml(
"<a><a><a><a><a><a><a><a><a><a><a>xxx</a></a></a></a></a></a></a></a></a></a></a>");
90 EXPECT_THROW(xml2json::xml2json(inxml), std::runtime_error);
95 int main(
int argc,
char **argv) {
96 ::testing::InitGoogleTest(&argc, argv);
97 return RUN_ALL_TESTS();