1
// SPDX-License-Identifier: LGPL-2.1-or-later
3
#include "gtest/gtest.h"
5
#include "App/ComplexGeoData.h"
6
#include "App/MappedName.h"
10
// NOLINTBEGIN(readability-magic-numbers)
12
TEST(MappedName, defaultConstruction)
15
Data::MappedName mappedName;
18
EXPECT_EQ(mappedName.isRaw(), false);
19
EXPECT_EQ(mappedName.empty(), true);
20
EXPECT_EQ(mappedName.size(), 0);
21
EXPECT_EQ(mappedName.dataBytes(), QByteArray());
22
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
25
TEST(MappedName, namedConstruction)
28
Data::MappedName mappedName("TEST");
31
EXPECT_EQ(mappedName.isRaw(), false);
32
EXPECT_EQ(mappedName.empty(), false);
33
EXPECT_EQ(mappedName.size(), 4);
34
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
35
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
38
TEST(MappedName, namedConstructionWithMaxSize)
41
Data::MappedName mappedName("TEST", 2);
44
EXPECT_EQ(mappedName.isRaw(), false);
45
EXPECT_EQ(mappedName.empty(), false);
46
EXPECT_EQ(mappedName.size(), 2);
47
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TE"));
48
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
51
TEST(MappedName, namedConstructionDiscardPrefix)
54
std::string name = std::string(Data::ELEMENT_MAP_PREFIX) + "TEST";
57
Data::MappedName mappedName(name.c_str());
60
EXPECT_EQ(mappedName.isRaw(), false);
61
EXPECT_EQ(mappedName.empty(), false);
62
EXPECT_EQ(mappedName.size(), 4);
63
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
64
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
67
TEST(MappedName, stringNamedConstruction)
70
Data::MappedName mappedName(std::string("TEST"));
73
EXPECT_EQ(mappedName.isRaw(), false);
74
EXPECT_EQ(mappedName.empty(), false);
75
EXPECT_EQ(mappedName.size(), 4);
76
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
77
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
80
TEST(MappedName, stringNamedConstructionDiscardPrefix)
83
std::string name = std::string(Data::ELEMENT_MAP_PREFIX) + "TEST";
86
Data::MappedName mappedName(name);
89
EXPECT_EQ(mappedName.isRaw(), false);
90
EXPECT_EQ(mappedName.empty(), false);
91
EXPECT_EQ(mappedName.size(), 4);
92
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
93
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
96
TEST(MappedName, constructFromIndexedNameNoIndex)
99
Data::IndexedName indexedName {"INDEXED_NAME"};
102
Data::MappedName mappedName {indexedName};
105
EXPECT_EQ(mappedName.dataBytes().constData(), indexedName.getType()); // shared memory
106
EXPECT_EQ(mappedName.isRaw(), true);
109
TEST(MappedName, constructFromIndexedNameWithIndex)
112
Data::IndexedName indexedName {"INDEXED_NAME", 1};
115
Data::MappedName mappedName {indexedName};
118
EXPECT_NE(mappedName.dataBytes().constData(), indexedName.getType()); // NOT shared memory
119
EXPECT_EQ(mappedName.isRaw(), false);
120
EXPECT_EQ(mappedName.toString(), indexedName.toString());
123
TEST(MappedName, copyConstructor)
126
Data::MappedName temp("TEST");
129
Data::MappedName mappedName(temp);
132
EXPECT_EQ(mappedName.isRaw(), false);
133
EXPECT_EQ(mappedName.empty(), false);
134
EXPECT_EQ(mappedName.size(), 4);
135
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
136
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
139
TEST(MappedName, copyConstructorWithPostfix)
142
Data::MappedName temp("TEST");
145
Data::MappedName mappedName(temp, "POSTFIXTEST");
148
EXPECT_EQ(mappedName.isRaw(), false);
149
EXPECT_EQ(mappedName.empty(), false);
150
EXPECT_EQ(mappedName.size(), 15);
151
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
152
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("POSTFIXTEST"));
155
Data::MappedName mappedName2(mappedName, "ANOTHERPOSTFIX");
158
EXPECT_EQ(mappedName2.isRaw(), false);
159
EXPECT_EQ(mappedName2.empty(), false);
160
EXPECT_EQ(mappedName2.size(), 29);
161
EXPECT_EQ(mappedName2.dataBytes(), QByteArray("TESTPOSTFIXTEST"));
162
EXPECT_EQ(mappedName2.postfixBytes(), QByteArray("ANOTHERPOSTFIX"));
165
TEST(MappedName, copyConstructorStartpos)
168
Data::MappedName temp(Data::MappedName("TEST"), "POSTFIXTEST");
171
Data::MappedName mappedName(temp, 2, -1);
174
EXPECT_EQ(mappedName.isRaw(), false);
175
EXPECT_EQ(mappedName.empty(), false);
176
EXPECT_EQ(mappedName.size(), 13);
177
EXPECT_EQ(mappedName.dataBytes(), QByteArray("ST"));
178
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("POSTFIXTEST"));
181
TEST(MappedName, copyConstructorStartposAndSize)
184
Data::MappedName temp(Data::MappedName("TEST"), "POSTFIXTEST");
187
Data::MappedName mappedName(temp, 2, 6);
190
EXPECT_EQ(mappedName.isRaw(), false);
191
EXPECT_EQ(mappedName.empty(), false);
192
EXPECT_EQ(mappedName.size(), 6);
193
EXPECT_EQ(mappedName.dataBytes(), QByteArray("ST"));
194
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("POST"));
197
TEST(MappedName, moveConstructor)
200
Data::MappedName temp(Data::MappedName("TEST"), "POSTFIXTEST");
203
Data::MappedName mappedName(std::move(temp));
206
EXPECT_EQ(mappedName.isRaw(), false);
207
EXPECT_EQ(mappedName.empty(), false);
208
EXPECT_EQ(mappedName.size(), 15);
209
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
210
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("POSTFIXTEST"));
213
TEST(MappedName, fromRawData)
216
Data::MappedName mappedName = Data::MappedName::fromRawData("TESTTEST", 8);
219
EXPECT_EQ(mappedName.isRaw(), true);
220
EXPECT_EQ(mappedName.empty(), false);
221
EXPECT_EQ(mappedName.size(), 8);
222
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TESTTEST", 8));
223
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
226
TEST(MappedName, fromRawDataQByteArray)
229
QByteArray testByteArray("TESTTEST", 8);
232
Data::MappedName mappedName = Data::MappedName::fromRawData(testByteArray);
235
EXPECT_EQ(mappedName.isRaw(), true);
236
EXPECT_EQ(mappedName.empty(), false);
237
EXPECT_EQ(mappedName.size(), 8);
238
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TESTTEST", 8));
239
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
242
TEST(MappedName, fromRawDataCopy)
245
QByteArray testByteArray("TESTTEST", 8);
246
Data::MappedName temp = Data::MappedName::fromRawData(testByteArray);
247
temp.append("TESTPOSTFIX");
248
temp.compact(); // Always call compact before accessing data!
251
Data::MappedName mappedName = Data::MappedName::fromRawData(temp, 0);
254
EXPECT_EQ(mappedName.isRaw(), true);
255
EXPECT_EQ(mappedName.empty(), false);
256
EXPECT_EQ(mappedName.size(), 19);
257
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TESTTEST", 8));
258
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("TESTPOSTFIX"));
261
TEST(MappedName, fromRawDataCopyStartposAndSize)
264
QByteArray testByteArray("TESTTEST", 8);
265
Data::MappedName temp = Data::MappedName::fromRawData(testByteArray);
266
temp.append("ABCDEFGHIJKLM"); // postfix
267
temp.compact(); // Always call compact before accessing data!
270
Data::MappedName mappedName = Data::MappedName::fromRawData(temp, 2, 13);
273
EXPECT_EQ(mappedName.isRaw(), true);
274
EXPECT_EQ(mappedName.empty(), false);
275
EXPECT_EQ(mappedName.size(), 13);
276
EXPECT_EQ(mappedName.dataBytes(), QByteArray("STTEST", 6));
277
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("ABCDEFG"));
280
TEST(MappedName, assignmentOperator)
283
Data::MappedName temp(Data::MappedName("TEST"), "POSTFIXTEST");
286
Data::MappedName mappedName = temp;
289
EXPECT_EQ(mappedName.isRaw(), false);
290
EXPECT_EQ(mappedName.empty(), false);
291
EXPECT_EQ(mappedName.size(), 15);
292
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
293
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("POSTFIXTEST"));
296
TEST(MappedName, assignmentOperatorString)
299
Data::MappedName mappedName;
302
mappedName = std::string("TEST");
305
EXPECT_EQ(mappedName.isRaw(), false);
306
EXPECT_EQ(mappedName.empty(), false);
307
EXPECT_EQ(mappedName.size(), 4);
308
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
309
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
312
TEST(MappedName, assignmentOperatorConstCharPtr)
315
Data::MappedName mappedName;
321
EXPECT_EQ(mappedName.isRaw(), false);
322
EXPECT_EQ(mappedName.empty(), false);
323
EXPECT_EQ(mappedName.size(), 4);
324
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
325
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
328
TEST(MappedName, assignmentOperatorMove)
331
Data::MappedName temp(Data::MappedName("TEST"), "POSTFIXTEST");
334
Data::MappedName mappedName = std::move(temp);
337
EXPECT_EQ(mappedName.isRaw(), false);
338
EXPECT_EQ(mappedName.empty(), false);
339
EXPECT_EQ(mappedName.size(), 15);
340
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
341
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("POSTFIXTEST"));
344
TEST(MappedName, streamInsertionOperator)
347
Data::MappedName mappedName(Data::MappedName("TEST"), "POSTFIXTEST");
348
std::stringstream ss;
354
EXPECT_EQ(ss.str(), std::string("TESTPOSTFIXTEST"));
357
TEST(MappedName, comparisonOperators)
360
Data::MappedName mappedName1(Data::MappedName("TEST"), "POSTFIXTEST");
361
Data::MappedName mappedName2(Data::MappedName("TEST"), "POSTFIXTEST");
362
Data::MappedName mappedName3(Data::MappedName("TESTPOST"), "FIXTEST");
363
Data::MappedName mappedName4(Data::MappedName("THIS"), "ISDIFFERENT");
366
EXPECT_EQ(mappedName1 == mappedName1, true);
367
EXPECT_EQ(mappedName1 == mappedName2, true);
368
EXPECT_EQ(mappedName1 == mappedName3, true);
369
EXPECT_EQ(mappedName1 == mappedName4, false);
371
EXPECT_EQ(mappedName1 != mappedName1, false);
372
EXPECT_EQ(mappedName1 != mappedName2, false);
373
EXPECT_EQ(mappedName1 != mappedName3, false);
374
EXPECT_EQ(mappedName1 != mappedName4, true);
377
TEST(MappedName, additionOperators)
380
Data::MappedName mappedName(Data::MappedName("TEST"), "POSTFIXTEST");
381
QByteArray post3("POST3");
384
mappedName += "POST1";
385
mappedName += std::string("POST2");
387
mappedName += Data::MappedName("POST4");
390
EXPECT_EQ(mappedName.isRaw(), false);
391
EXPECT_EQ(mappedName.empty(), false);
392
EXPECT_EQ(mappedName.size(), 35);
393
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
394
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("POSTFIXTESTPOST1POST2POST3POST4"));
397
mappedName = Data::MappedName(Data::MappedName("TEST"), "POSTFIXTEST");
398
QByteArray post8("POST8");
401
mappedName = mappedName + Data::MappedName("POST5");
402
mappedName = mappedName + "POST6";
403
mappedName = mappedName + std::string("POST7");
404
mappedName = mappedName + post8;
407
EXPECT_EQ(mappedName.isRaw(), false);
408
EXPECT_EQ(mappedName.empty(), false);
409
EXPECT_EQ(mappedName.size(), 35);
410
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
411
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("POSTFIXTESTPOST5POST6POST7POST8"));
414
TEST(MappedName, append)
417
Data::MappedName mappedName;
420
mappedName.append("TEST");
423
EXPECT_EQ(mappedName.isRaw(), false);
424
EXPECT_EQ(mappedName.empty(), false);
425
EXPECT_EQ(mappedName.size(), 4);
426
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
427
EXPECT_EQ(mappedName.postfixBytes(), QByteArray(""));
430
mappedName.append("POSTFIX");
433
EXPECT_EQ(mappedName.isRaw(), false);
434
EXPECT_EQ(mappedName.empty(), false);
435
EXPECT_EQ(mappedName.size(), 11);
436
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
437
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("POSTFIX"));
440
mappedName.append("ANOTHERPOSTFIX", 5);
443
EXPECT_EQ(mappedName.isRaw(), false);
444
EXPECT_EQ(mappedName.empty(), false);
445
EXPECT_EQ(mappedName.size(), 16);
446
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
447
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("POSTFIXANOTH"));
450
TEST(MappedName, appendMappedNameObj)
453
Data::MappedName mappedName;
454
Data::MappedName temp(Data::MappedName("TEST"), "POSTFIXTEST");
457
mappedName.append(temp);
460
EXPECT_EQ(mappedName.isRaw(), false);
461
EXPECT_EQ(mappedName.empty(), false);
462
EXPECT_EQ(mappedName.size(), 15);
463
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
464
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("POSTFIXTEST"));
467
mappedName.append(temp, 2, 7);
470
EXPECT_EQ(mappedName.isRaw(), false);
471
EXPECT_EQ(mappedName.empty(), false);
472
EXPECT_EQ(mappedName.size(), 22);
473
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
474
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("POSTFIXTESTSTPOSTF"));
477
TEST(MappedName, toString)
480
Data::MappedName mappedName(Data::MappedName("TEST"), "POSTFIXTEST");
483
EXPECT_EQ(mappedName.toString(0), "TESTPOSTFIXTEST");
484
EXPECT_EQ(mappedName.toString(0), std::string("TESTPOSTFIXTEST"));
485
EXPECT_EQ(mappedName.toString(2, 8), "STPOSTFI");
486
EXPECT_EQ(mappedName.toString(2, 8), std::string("STPOSTFI"));
489
TEST(MappedName, toConstString)
492
Data::MappedName mappedName(Data::MappedName("TEST"), "POSTFIXTEST");
496
const char* temp = mappedName.toConstString(0, size);
499
EXPECT_EQ(QByteArray(temp, size), QByteArray("TEST"));
503
const char* temp2 = mappedName.toConstString(7, size);
506
EXPECT_EQ(QByteArray(temp2, size), QByteArray("TFIXTEST"));
510
TEST(MappedName, toRawBytes)
513
Data::MappedName mappedName(Data::MappedName("TEST"), "POSTFIXTEST");
516
EXPECT_EQ(mappedName.toRawBytes(), QByteArray("TESTPOSTFIXTEST"));
517
EXPECT_EQ(mappedName.toRawBytes(3), QByteArray("TPOSTFIXTEST"));
518
EXPECT_EQ(mappedName.toRawBytes(7, 3), QByteArray("TFI"));
519
EXPECT_EQ(mappedName.toRawBytes(502, 5), QByteArray());
522
TEST(MappedName, toIndexedNameASCIIOnly)
525
Data::MappedName mappedName {"MAPPED_NAME"};
528
auto indexedName = mappedName.toIndexedName();
531
EXPECT_FALSE(indexedName.isNull());
534
TEST(MappedName, toIndexedNameInvalid)
537
Data::MappedName mappedName {"MAPPED-NAME"};
540
auto indexedName = mappedName.toIndexedName();
543
EXPECT_TRUE(indexedName.isNull());
546
TEST(MappedName, appendToBuffer)
549
Data::MappedName mappedName(Data::MappedName("TEST"), "POSTFIXTEST");
550
std::string buffer("STUFF");
553
mappedName.appendToBuffer(buffer);
556
EXPECT_EQ(buffer, std::string("STUFFTESTPOSTFIXTEST"));
559
mappedName.appendToBuffer(buffer, 2, 7);
562
EXPECT_EQ(buffer, std::string("STUFFTESTPOSTFIXTESTSTPOSTF"));
565
TEST(MappedName, appendToBufferWithPrefix)
568
Data::MappedName mappedName(Data::MappedName("TEST"), "POSTFIXTEST");
569
std::string buffer("STUFF");
570
std::string elemMapPrefix = Data::ELEMENT_MAP_PREFIX;
573
mappedName.appendToBufferWithPrefix(buffer);
576
EXPECT_EQ(buffer, std::string("STUFF") + elemMapPrefix + std::string("TESTPOSTFIXTEST"));
579
Data::MappedName mappedName2("TEST"); // If mappedName does not have a postfix and is a valid
580
// indexedName: prefix is not added
583
mappedName2.appendToBufferWithPrefix(buffer);
587
std::string("STUFF") + elemMapPrefix + std::string("TESTPOSTFIXTEST")
588
+ /*missing prefix*/ std::string("TEST"));
591
TEST(MappedName, toPrefixedString)
594
Data::MappedName mappedName(Data::MappedName("TEST"), "POSTFIXTEST");
595
std::string buffer("STUFF");
596
std::string elemMapPrefix = Data::ELEMENT_MAP_PREFIX;
599
buffer += mappedName.toPrefixedString();
602
EXPECT_EQ(buffer, std::string("STUFF") + elemMapPrefix + std::string("TESTPOSTFIXTEST"));
605
Data::MappedName mappedName2("TEST"); // If mappedName does not have a postfix and is a valid
606
// indexedName: prefix is not added
609
buffer += mappedName2.toPrefixedString();
613
std::string("STUFF") + elemMapPrefix + std::string("TESTPOSTFIXTEST")
614
+ /*missing prefix*/ std::string("TEST"));
617
TEST(MappedName, toBytes)
620
Data::MappedName mappedName(Data::MappedName("TEST"), "POSTFIXTEST");
623
EXPECT_EQ(mappedName.toBytes(), QByteArray("TESTPOSTFIXTEST"));
626
TEST(MappedName, compare)
629
Data::MappedName mappedName1(Data::MappedName("TEST"), "POSTFIXTEST");
630
Data::MappedName mappedName2(Data::MappedName("TEST"), "POSTFIXTEST");
631
Data::MappedName mappedName3(Data::MappedName("TESTPOST"), "FIXTEST");
632
Data::MappedName mappedName4(Data::MappedName("THIS"), "ISDIFFERENT");
633
Data::MappedName mappedName5(Data::MappedName("SH"), "ORTHER");
634
Data::MappedName mappedName6(Data::MappedName("VERYVERYVERY"), "VERYMUCHLONGER");
637
EXPECT_EQ(mappedName1.compare(mappedName1), 0);
638
EXPECT_EQ(mappedName1.compare(mappedName2), 0);
639
EXPECT_EQ(mappedName1.compare(mappedName3), 0);
640
EXPECT_EQ(mappedName1.compare(mappedName4), -1);
641
EXPECT_EQ(mappedName1.compare(mappedName5), 1);
642
EXPECT_EQ(mappedName1.compare(mappedName6), -1);
644
EXPECT_EQ(mappedName1 < mappedName1, false);
645
EXPECT_EQ(mappedName1 < mappedName2, false);
646
EXPECT_EQ(mappedName1 < mappedName3, false);
647
EXPECT_EQ(mappedName1 < mappedName4, true);
648
EXPECT_EQ(mappedName1 < mappedName5, false);
649
EXPECT_EQ(mappedName1 < mappedName6, true);
652
TEST(MappedName, subscriptOperator)
655
Data::MappedName mappedName(Data::MappedName("TEST"), "POSTFIXTEST");
658
EXPECT_EQ(mappedName[0], 'T');
659
EXPECT_EQ(mappedName[1], 'E');
660
EXPECT_EQ(mappedName[2], 'S');
661
EXPECT_EQ(mappedName[3], 'T');
662
EXPECT_EQ(mappedName[4], 'P');
663
EXPECT_EQ(mappedName[5], 'O');
664
EXPECT_EQ(mappedName[6], 'S');
665
EXPECT_EQ(mappedName[7], 'T');
666
EXPECT_EQ(mappedName[8], 'F');
667
EXPECT_EQ(mappedName[9], 'I');
670
TEST(MappedName, copy)
673
Data::MappedName mappedName(Data::MappedName("TEST"), "POSTFIXTEST");
676
Data::MappedName mappedName2 = mappedName.copy();
679
EXPECT_EQ(mappedName, mappedName2);
682
TEST(MappedName, compact)
685
Data::MappedName mappedName = Data::MappedName::fromRawData("TESTTEST", 8);
688
mappedName.compact();
691
EXPECT_EQ(mappedName.isRaw(), false);
692
EXPECT_EQ(mappedName.empty(), false);
693
EXPECT_EQ(mappedName.size(), 8);
694
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TESTTEST", 8));
695
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
698
TEST(MappedName, boolOperator)
701
Data::MappedName mappedName;
704
EXPECT_EQ((bool)mappedName, false);
707
mappedName.append("TEST");
710
EXPECT_EQ((bool)mappedName, true);
713
TEST(MappedName, clear)
716
Data::MappedName mappedName(Data::MappedName("TEST"), "POSTFIXTEST");
722
EXPECT_EQ(mappedName.empty(), true);
725
TEST(MappedName, find)
728
Data::MappedName mappedName(Data::MappedName("TEST"), "POSTFIXTEST");
731
EXPECT_EQ(mappedName.find(nullptr), -1);
732
EXPECT_EQ(mappedName.find(""), 0);
733
EXPECT_EQ(mappedName.find(std::string("")), 0);
734
EXPECT_EQ(mappedName.find("TEST"), 0);
735
EXPECT_EQ(mappedName.find("STPO"), -1); // sentence must be fully contained in data or postfix
736
EXPECT_EQ(mappedName.find("POST"), 4);
737
EXPECT_EQ(mappedName.find("POST", 4), 4);
738
EXPECT_EQ(mappedName.find("POST", 5), -1);
740
EXPECT_EQ(mappedName.rfind("ST"), 13);
741
EXPECT_EQ(mappedName.rfind("ST", 15), 13);
742
EXPECT_EQ(mappedName.rfind("ST", 14), 13);
743
EXPECT_EQ(mappedName.rfind("ST", 13), 13);
744
EXPECT_EQ(mappedName.rfind("ST", 12), 6);
745
EXPECT_EQ(mappedName.rfind("ST", 11), 6);
746
EXPECT_EQ(mappedName.rfind("ST", 10), 6);
747
EXPECT_EQ(mappedName.rfind("ST", 9), 6);
748
EXPECT_EQ(mappedName.rfind("ST", 8), 6);
749
EXPECT_EQ(mappedName.rfind("ST", 7), 6);
750
EXPECT_EQ(mappedName.rfind("ST", 6), 6);
751
EXPECT_EQ(mappedName.rfind("ST", 5), 2);
752
EXPECT_EQ(mappedName.rfind("ST", 4), 2);
753
EXPECT_EQ(mappedName.rfind("ST", 3), 2);
754
EXPECT_EQ(mappedName.rfind("ST", 2), 2);
755
EXPECT_EQ(mappedName.rfind("ST", 1), -1);
756
EXPECT_EQ(mappedName.rfind("ST", 0), -1);
759
TEST(MappedName, rfind)
762
Data::MappedName mappedName(Data::MappedName("TEST"), "POSTFIXTEST");
765
EXPECT_EQ(mappedName.rfind(nullptr), -1);
766
EXPECT_EQ(mappedName.rfind(""), mappedName.size());
767
EXPECT_EQ(mappedName.rfind(std::string("")), mappedName.size());
768
EXPECT_EQ(mappedName.rfind("TEST"), 11);
769
EXPECT_EQ(mappedName.rfind("STPO"), -1); // sentence must be fully contained in data or postfix
770
EXPECT_EQ(mappedName.rfind("POST"), 4);
771
EXPECT_EQ(mappedName.rfind("POST", 4), 4);
772
EXPECT_EQ(mappedName.rfind("POST", 3), -1);
774
EXPECT_EQ(mappedName.rfind("ST"), 13);
775
EXPECT_EQ(mappedName.rfind("ST", 0), -1);
776
EXPECT_EQ(mappedName.rfind("ST", 1), -1);
777
EXPECT_EQ(mappedName.rfind("ST", 2), 2);
778
EXPECT_EQ(mappedName.rfind("ST", 3), 2);
779
EXPECT_EQ(mappedName.rfind("ST", 4), 2);
780
EXPECT_EQ(mappedName.rfind("ST", 5), 2);
781
EXPECT_EQ(mappedName.rfind("ST", 6), 6);
782
EXPECT_EQ(mappedName.rfind("ST", 7), 6);
783
EXPECT_EQ(mappedName.rfind("ST", 8), 6);
784
EXPECT_EQ(mappedName.rfind("ST", 9), 6);
785
EXPECT_EQ(mappedName.rfind("ST", 10), 6);
786
EXPECT_EQ(mappedName.rfind("ST", 11), 6);
787
EXPECT_EQ(mappedName.rfind("ST", 12), 6);
788
EXPECT_EQ(mappedName.rfind("ST", 13), 13);
789
EXPECT_EQ(mappedName.rfind("ST", 14), 13);
790
EXPECT_EQ(mappedName.rfind("ST", 15), 13);
793
TEST(MappedName, endswith)
796
Data::MappedName mappedName("TEST");
799
EXPECT_EQ(mappedName.endsWith(nullptr), false);
800
EXPECT_EQ(mappedName.endsWith("TEST"), true);
801
EXPECT_EQ(mappedName.endsWith(std::string("TEST")), true);
802
EXPECT_EQ(mappedName.endsWith("WASD"), false);
805
mappedName.append("POSTFIX");
808
EXPECT_EQ(mappedName.endsWith(nullptr), false);
809
EXPECT_EQ(mappedName.endsWith("TEST"), false);
810
EXPECT_EQ(mappedName.endsWith("FIX"), true);
813
TEST(MappedName, startsWith)
816
Data::MappedName mappedName;
819
EXPECT_EQ(mappedName.startsWith(nullptr), false);
820
EXPECT_EQ(mappedName.startsWith(QByteArray()), true);
821
EXPECT_EQ(mappedName.startsWith(""), true);
822
EXPECT_EQ(mappedName.startsWith(std::string("")), true);
823
EXPECT_EQ(mappedName.startsWith("WASD"), false);
826
mappedName.append("TEST");
829
EXPECT_EQ(mappedName.startsWith(nullptr), false);
830
EXPECT_EQ(mappedName.startsWith(QByteArray()), true);
831
EXPECT_EQ(mappedName.startsWith("TEST"), true);
832
EXPECT_EQ(mappedName.startsWith(std::string("TEST")), true);
833
EXPECT_EQ(mappedName.startsWith("WASD"), false);
836
TEST(MappedName, findTagInElementNameHexPositiveIndexNonrecursive)
838
// The non-recursive version will find just the last tag, prefixed by the POSTFIX_TAG (";:H").
839
// It consists of a tag (stored in hexadecimal) and a length (also stored in hex), separated by
840
// a colon. In this example, we expect the get ;:H1b:10,F as our element, which is a tag of
841
// 0x1b and an indicated length of 0x10 (16 bytes). So the output length is the position of the
842
// tag (36) minus the indicated length, giving 20.
845
Data::MappedName mappedName("#94;:G0;XTR;:H19:8,F;:H1a,F;BND:-1:0;:H1b:10,F");
853
mappedName.findTagInElementName(&tagOutput, &lenOutput, &postfix, &type, false, false);
856
EXPECT_EQ(result, 36); // The location of the tag
857
EXPECT_EQ(tagOutput, 0x1b); // The tag
858
EXPECT_EQ(lenOutput, 20); // The calculated length based on the tag's length parameter
859
EXPECT_EQ(postfix, ";:H1b:10,F");
860
EXPECT_EQ(type, 'F'); // F=Face
863
TEST(MappedName, findTagInElementNameDecPositiveIndexNonrecursive)
865
// Test backwards compatibility with the older style decimal tag storage.
868
Data::MappedName mappedName("#94;:G0;XTR;:T19:8,F;:T26,F;BND:-1:0;:T27:16,F");
876
mappedName.findTagInElementName(&tagOutput, &lenOutput, &postfix, &type, false, false);
879
EXPECT_EQ(result, 36); // The location of the tag
880
EXPECT_EQ(tagOutput, 27); // The tag
881
EXPECT_EQ(lenOutput, 16); // The specified length
882
EXPECT_EQ(postfix, ";:T27:16,F");
883
EXPECT_EQ(type, 'F'); // F=Face
886
TEST(MappedName, findTagInElementNameHexNegativeIndexNonrecursive)
888
// Test handling a negative index that is flipped to positive
891
Data::MappedName mappedName("#94;:G0;XTR;:H19:8,F;:H1a,F;BND:-1:0;:H-1b:10,F");
899
mappedName.findTagInElementName(&tagOutput, &lenOutput, &postfix, &type, false, false);
902
EXPECT_EQ(result, 36); // The location of the tag
903
EXPECT_EQ(tagOutput, 0x1b); // The tag is returned positive, even though it was input negative
904
EXPECT_EQ(lenOutput, 20); // The calculated length based on the tag's length parameter
905
EXPECT_EQ(postfix, ";:H-1b:10,F");
906
EXPECT_EQ(type, 'F'); // F=Face
909
TEST(MappedName, findTagInElementNameHexExpectedNegativeIndexNonrecursive)
911
// Test handling an untransformed negative index
914
Data::MappedName mappedName("#94;:G0;XTR;:H19:8,F;:H1a,F;BND:-1:0;:H-1b:10,F");
922
mappedName.findTagInElementName(&tagOutput, &lenOutput, &postfix, &type, true, false);
925
EXPECT_EQ(result, 36); // The location of the tag
926
EXPECT_EQ(tagOutput, -0x1b); // The tag is returned negative
927
EXPECT_EQ(lenOutput, 20); // The calculated length based on the tag's length parameter
928
EXPECT_EQ(postfix, ";:H-1b:10,F");
929
EXPECT_EQ(type, 'F'); // F=Face
932
TEST(MappedName, findTagInElementNameRecursive)
934
// Test the recursive resolution of the name
937
Data::MappedName mappedName("#94;:G0;XTR;:H19:8,F;:H1a,F;BND:-1:0;:H1b:10,F");
945
mappedName.findTagInElementName(&tagOutput, &lenOutput, &postfix, &type, false, true);
948
EXPECT_EQ(result, 36); // The location of the tag
949
EXPECT_EQ(tagOutput, 0x1b); // The tag
950
EXPECT_EQ(lenOutput, 27); // Now includes the next tag, from the recursive search
951
EXPECT_EQ(postfix, ";:H1b:10,F");
952
EXPECT_EQ(type, 'F'); // F=Face
955
TEST(MappedName, hash)
958
Data::MappedName mappedName(Data::MappedName("TEST"), "POSTFIXTEST");
961
EXPECT_EQ(mappedName.hash(), qHash(QByteArray("TEST"), qHash(QByteArray("POSTFIXTEST"))));
964
// NOLINTEND(readability-magic-numbers)