summaryrefslogtreecommitdiffstats
path: root/gfx/tests/gtest/TestSkipChars.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/tests/gtest/TestSkipChars.cpp')
-rw-r--r--gfx/tests/gtest/TestSkipChars.cpp156
1 files changed, 156 insertions, 0 deletions
diff --git a/gfx/tests/gtest/TestSkipChars.cpp b/gfx/tests/gtest/TestSkipChars.cpp
new file mode 100644
index 0000000000..8f31777619
--- /dev/null
+++ b/gfx/tests/gtest/TestSkipChars.cpp
@@ -0,0 +1,156 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "gtest/gtest.h"
+
+#include "gfxSkipChars.h"
+#include "mozilla/ArrayUtils.h"
+
+static bool TestConstructor() {
+ gfxSkipChars skipChars;
+
+ EXPECT_TRUE(skipChars.GetOriginalCharCount() == 0)
+ << "[1] Make sure the gfxSkipChars was properly initialized with "
+ "constructor";
+
+ return true;
+}
+
+static bool TestLength() {
+ gfxSkipChars skipChars;
+
+ skipChars.KeepChars(100);
+
+ EXPECT_TRUE(skipChars.GetOriginalCharCount() == 100)
+ << "[1] Check length after keeping chars";
+
+ skipChars.SkipChars(50);
+
+ EXPECT_TRUE(skipChars.GetOriginalCharCount() == 150)
+ << "[2] Check length after skipping chars";
+
+ skipChars.SkipChars(50);
+
+ EXPECT_TRUE(skipChars.GetOriginalCharCount() == 200)
+ << "[3] Check length after skipping more chars";
+
+ skipChars.KeepChar();
+
+ EXPECT_TRUE(skipChars.GetOriginalCharCount() == 201)
+ << "[4] Check length after keeping a final char";
+
+ return true;
+}
+
+static bool TestIterator() {
+ // Test a gfxSkipChars that starts with kept chars
+ gfxSkipChars skipChars1;
+
+ skipChars1.KeepChars(9);
+ skipChars1.SkipChar();
+ skipChars1.KeepChars(9);
+ skipChars1.SkipChar();
+ skipChars1.KeepChars(9);
+
+ EXPECT_TRUE(skipChars1.GetOriginalCharCount() == 29) << "[1] Check length";
+
+ gfxSkipCharsIterator iter1(skipChars1);
+
+ EXPECT_TRUE(iter1.GetOriginalOffset() == 0)
+ << "[2] Check initial original offset";
+ EXPECT_TRUE(iter1.GetSkippedOffset() == 0)
+ << "[3] Check initial skipped offset";
+
+ EXPECT_TRUE(iter1.IsOriginalCharSkipped() == false)
+ << "[3a] Check IsOriginalCharSkipped for initial position";
+
+ uint32_t expectSkipped1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27};
+
+ for (uint32_t i = 0; i < mozilla::ArrayLength(expectSkipped1); i++) {
+ EXPECT_TRUE(iter1.ConvertOriginalToSkipped(i) == expectSkipped1[i])
+ << "[4] Check mapping of original to skipped for " << i;
+ }
+
+ int32_t expectOriginal1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28};
+
+ for (uint32_t i = 0; i < mozilla::ArrayLength(expectOriginal1); i++) {
+ EXPECT_TRUE(iter1.ConvertSkippedToOriginal(i) == expectOriginal1[i])
+ << "[5] Check mapping of skipped to original for " << i;
+ }
+
+ bool expectIsOriginalSkipped1[] = {
+ false, false, false, false, false, false, false, false, false, true,
+ false, false, false, false, false, false, false, false, false, true,
+ false, false, false, false, false, false, false, false, false};
+
+ for (uint32_t i = 0; i < mozilla::ArrayLength(expectIsOriginalSkipped1);
+ i++) {
+ iter1.SetOriginalOffset(i);
+ EXPECT_TRUE(iter1.IsOriginalCharSkipped() == expectIsOriginalSkipped1[i])
+ << "[5.a] Check IsOriginalCharSkipped for " << i;
+ }
+
+ // Test a gfxSkipChars that starts with skipped chars
+ gfxSkipChars skipChars2;
+
+ skipChars2.SkipChars(9);
+ skipChars2.KeepChar();
+ skipChars2.SkipChars(9);
+ skipChars2.KeepChar();
+ skipChars2.SkipChars(9);
+
+ EXPECT_TRUE(skipChars2.GetOriginalCharCount() == 29) << "[6] Check length";
+
+ gfxSkipCharsIterator iter2(skipChars2);
+
+ EXPECT_TRUE(iter2.GetOriginalOffset() == 0)
+ << "[7] Check initial original offset";
+ EXPECT_TRUE(iter2.GetSkippedOffset() == 0)
+ << "[8] Check initial skipped offset";
+
+ EXPECT_TRUE(iter2.IsOriginalCharSkipped() == true)
+ << "[8a] Check IsOriginalCharSkipped for initial position";
+
+ uint32_t expectSkipped2[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2};
+
+ for (uint32_t i = 0; i < mozilla::ArrayLength(expectSkipped2); i++) {
+ EXPECT_TRUE(iter2.ConvertOriginalToSkipped(i) == expectSkipped2[i])
+ << "[9] Check mapping of original to skipped for " << i;
+ }
+
+ int32_t expectOriginal2[] = {9, 19, 29};
+
+ for (uint32_t i = 0; i < mozilla::ArrayLength(expectOriginal2); i++) {
+ EXPECT_TRUE(iter2.ConvertSkippedToOriginal(i) == expectOriginal2[i])
+ << "[10] Check mapping of skipped to original for " << i;
+ }
+
+ bool expectIsOriginalSkipped2[] = {
+ true, true, true, true, true, true, true, true, true, false,
+ true, true, true, true, true, true, true, true, true, false,
+ true, true, true, true, true, true, true, true, true};
+
+ for (uint32_t i = 0; i < mozilla::ArrayLength(expectIsOriginalSkipped2);
+ i++) {
+ iter2.SetOriginalOffset(i);
+ EXPECT_TRUE(iter2.IsOriginalCharSkipped() == expectIsOriginalSkipped2[i])
+ << "[10.a] Check IsOriginalCharSkipped for " << i;
+ }
+
+ return true;
+}
+
+TEST(Gfx, gfxSkipChars)
+{
+ TestConstructor();
+ TestLength();
+ TestIterator();
+}