xref: /haiku/src/tests/apps/haikudepot/StandardMetaDataJsonEventListenerTest.cpp (revision a1c3daa638cae1c49ea263b124a5c19c8e966a72)
1 /*
2  * Copyright 2017, Andrew Lindesay <apl@lindesay.co.nz>.
3  * All rights reserved. Distributed under the terms of the MIT License.
4  */
5 
6 #include "StandardMetaData.h"
7 #include "StandardMetaDataJsonEventListener.h"
8 #include "StandardMetaDataJsonEventListenerTest.h"
9 
10 #include <stdio.h>
11 
12 #include <AutoDeleter.h>
13 #include <Json.h>
14 
15 #include <cppunit/TestCaller.h>
16 #include <cppunit/TestSuite.h>
17 
18 
19 #define INPUT_TOP_LEVEL "{\"createTimestamp\":123456," \
20 	"\"dataModifiedTimestamp\":789012}"
21 
22 // This example is from the HDS server and comes back as part of the icons
23 // bundle; real-world example.
24 
25 #define INPUT_ICON "{\"createTimestamp\":1501456139480," \
26 	"\"createTimestampIso\":\"2017-07-30 23:08:59\"," \
27 	"\"dataModifiedTimestamp\":1500536391000," \
28 	"\"dataModifiedTimestampIso\":\"2017-07-20 07:39:51\"," \
29 	"\"agent\":\"hds\"," \
30 	"\"agentVersion\":\"1.0.86\"" \
31 	"}"
32 
33 #define INPUT_THIRD_LEVEL "{" \
34 	"\"createTimestamp\":99999," \
35 	"\"gonk\":{\"zink\":[ 123, { \"a\":\"b\" } ]}\n," \
36 	"\"rink\":{" \
37 		"\"tonk\":{" \
38 			"\"createTimestamp\":665544," \
39 			"\"dataModifiedTimestamp\":554433" \
40 		"}" \
41 	"}," \
42 	"\"cake\": { \"type\": \"bananas\" }," \
43 	"\"createTimestamp\":99999," \
44 "}"
45 
46 #define INPUT_BROKEN "{\"broken\",,"
47 
48 
StandardMetaDataJsonEventListenerTest()49 StandardMetaDataJsonEventListenerTest::StandardMetaDataJsonEventListenerTest()
50 {
51 }
52 
53 
~StandardMetaDataJsonEventListenerTest()54 StandardMetaDataJsonEventListenerTest::~StandardMetaDataJsonEventListenerTest()
55 {
56 }
57 
58 
59 void
TestGeneric(const char * input,const char * jsonPath,status_t expectedStatus,uint64_t expectedCreateTimestamp,uint64_t expectedDataModifiedTimestamp)60 StandardMetaDataJsonEventListenerTest::TestGeneric(
61 	const char* input, const char* jsonPath, status_t expectedStatus,
62 	uint64_t expectedCreateTimestamp, uint64_t expectedDataModifiedTimestamp)
63 {
64 	StandardMetaData metaData;
65 	StandardMetaDataJsonEventListener listener(jsonPath, metaData);
66 
67 	BDataIO* inputData = new BMemoryIO(input, strlen(input));
68 	ObjectDeleter<BDataIO> inputDataDeleter(inputData);
69 	BMallocIO* outputData = new BMallocIO();
70 	ObjectDeleter<BMallocIO> outputDataDeleter(outputData);
71 
72 // ----------------------
73 	BPrivate::BJson::Parse(inputData, &listener);
74 // ----------------------
75 
76 	CPPUNIT_ASSERT_EQUAL(expectedStatus, listener.ErrorStatus());
77 	CPPUNIT_ASSERT_EQUAL(expectedCreateTimestamp,
78 		metaData.GetCreateTimestamp());
79 	CPPUNIT_ASSERT_EQUAL(expectedDataModifiedTimestamp,
80 		metaData.GetDataModifiedTimestamp());
81 }
82 
83 
84 void
TestTopLevel()85 StandardMetaDataJsonEventListenerTest::TestTopLevel()
86 {
87 	TestGeneric(INPUT_TOP_LEVEL, "$", B_OK, 123456L, 789012L);
88 }
89 
90 
91 void
TestIcon()92 StandardMetaDataJsonEventListenerTest::TestIcon()
93 {
94 	TestGeneric(INPUT_ICON, "$", B_OK, 1501456139480ULL, 1500536391000ULL);
95 }
96 
97 
98 void
TestThirdLevel()99 StandardMetaDataJsonEventListenerTest::TestThirdLevel()
100 {
101 	TestGeneric(INPUT_THIRD_LEVEL, "$.rink.tonk", B_OK, 665544L, 554433L);
102 }
103 
104 
105 void
TestBroken()106 StandardMetaDataJsonEventListenerTest::TestBroken()
107 {
108 	TestGeneric(INPUT_BROKEN, "$", B_BAD_DATA, 0L, 0L);
109 }
110 
111 
112 /*static*/ void
AddTests(BTestSuite & parent)113 StandardMetaDataJsonEventListenerTest::AddTests(BTestSuite& parent)
114 {
115 	CppUnit::TestSuite& suite = *new CppUnit::TestSuite(
116 		"StandardMetaDataJsonEventListenerTest");
117 
118 	suite.addTest(
119 		new CppUnit::TestCaller<StandardMetaDataJsonEventListenerTest>(
120 			"StandardMetaDataJsonEventListenerTest::TestTopLevel",
121 			&StandardMetaDataJsonEventListenerTest::TestTopLevel));
122 
123 	suite.addTest(
124 		new CppUnit::TestCaller<StandardMetaDataJsonEventListenerTest>(
125 			"StandardMetaDataJsonEventListenerTest::TestIcon",
126 			&StandardMetaDataJsonEventListenerTest::TestIcon));
127 
128 	suite.addTest(
129 		new CppUnit::TestCaller<StandardMetaDataJsonEventListenerTest>(
130 			"StandardMetaDataJsonEventListenerTest::TestThirdLevel",
131 			&StandardMetaDataJsonEventListenerTest::TestThirdLevel));
132 
133 	suite.addTest(
134 		new CppUnit::TestCaller<StandardMetaDataJsonEventListenerTest>(
135 			"StandardMetaDataJsonEventListenerTest::TestBroken",
136 			&StandardMetaDataJsonEventListenerTest::TestBroken));
137 
138 	parent.addTest("StandardMetaDataJsonEventListenerTest", &suite);
139 }