michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "gtest/gtest.h" michael@0: michael@0: #include "gfxSkipChars.h" michael@0: #include "mozilla/ArrayUtils.h" michael@0: michael@0: static bool michael@0: TestConstructor() michael@0: { michael@0: gfxSkipChars skipChars; michael@0: michael@0: EXPECT_TRUE(skipChars.GetOriginalCharCount() == 0) << michael@0: "[1] Make sure the gfxSkipChars was properly initialized with constructor"; michael@0: michael@0: return true; michael@0: } michael@0: michael@0: static bool michael@0: TestLength() michael@0: { michael@0: gfxSkipChars skipChars; michael@0: michael@0: skipChars.KeepChars(100); michael@0: michael@0: EXPECT_TRUE(skipChars.GetOriginalCharCount() == 100) << michael@0: "[1] Check length after keeping chars"; michael@0: michael@0: skipChars.SkipChars(50); michael@0: michael@0: EXPECT_TRUE(skipChars.GetOriginalCharCount() == 150) << michael@0: "[2] Check length after skipping chars"; michael@0: michael@0: skipChars.SkipChars(50); michael@0: michael@0: EXPECT_TRUE(skipChars.GetOriginalCharCount() == 200) << michael@0: "[3] Check length after skipping more chars"; michael@0: michael@0: skipChars.KeepChar(); michael@0: michael@0: EXPECT_TRUE(skipChars.GetOriginalCharCount() == 201) << michael@0: "[4] Check length after keeping a final char"; michael@0: michael@0: return true; michael@0: } michael@0: michael@0: static bool michael@0: TestIterator() michael@0: { michael@0: // Test a gfxSkipChars that starts with kept chars michael@0: gfxSkipChars skipChars1; michael@0: michael@0: skipChars1.KeepChars(9); michael@0: skipChars1.SkipChar(); michael@0: skipChars1.KeepChars(9); michael@0: skipChars1.SkipChar(); michael@0: skipChars1.KeepChars(9); michael@0: michael@0: EXPECT_TRUE(skipChars1.GetOriginalCharCount() == 29) << michael@0: "[1] Check length"; michael@0: michael@0: gfxSkipCharsIterator iter1(skipChars1); michael@0: michael@0: EXPECT_TRUE(iter1.GetOriginalOffset() == 0) << michael@0: "[2] Check initial original offset"; michael@0: EXPECT_TRUE(iter1.GetSkippedOffset() == 0) << michael@0: "[3] Check initial skipped offset"; michael@0: michael@0: uint32_t expectSkipped1[] = michael@0: { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, michael@0: 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, michael@0: 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }; michael@0: michael@0: for (uint32_t i = 0; i < mozilla::ArrayLength(expectSkipped1); i++) { michael@0: EXPECT_TRUE(iter1.ConvertOriginalToSkipped(i) == expectSkipped1[i]) << michael@0: "[4] Check mapping of original to skipped for " << i; michael@0: } michael@0: michael@0: uint32_t expectOriginal1[] = michael@0: { 0, 1, 2, 3, 4, 5, 6, 7, 8, michael@0: 10, 11, 12, 13, 14, 15, 16, 17, 18, michael@0: 20, 21, 22, 23, 24, 25, 26, 27, 28 }; michael@0: michael@0: for (uint32_t i = 0; i < mozilla::ArrayLength(expectOriginal1); i++) { michael@0: EXPECT_TRUE(iter1.ConvertSkippedToOriginal(i) == expectOriginal1[i]) << michael@0: "[5] Check mapping of skipped to original for " << i; michael@0: } michael@0: michael@0: // Test a gfxSkipChars that starts with skipped chars michael@0: gfxSkipChars skipChars2; michael@0: michael@0: skipChars2.SkipChars(9); michael@0: skipChars2.KeepChar(); michael@0: skipChars2.SkipChars(9); michael@0: skipChars2.KeepChar(); michael@0: skipChars2.SkipChars(9); michael@0: michael@0: EXPECT_TRUE(skipChars2.GetOriginalCharCount() == 29) << michael@0: "[6] Check length"; michael@0: michael@0: gfxSkipCharsIterator iter2(skipChars2); michael@0: michael@0: EXPECT_TRUE(iter2.GetOriginalOffset() == 0) << michael@0: "[7] Check initial original offset"; michael@0: EXPECT_TRUE(iter2.GetSkippedOffset() == 0) << michael@0: "[8] Check initial skipped offset"; michael@0: michael@0: uint32_t expectSkipped2[] = michael@0: { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, michael@0: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, michael@0: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }; michael@0: michael@0: for (uint32_t i = 0; i < mozilla::ArrayLength(expectSkipped2); i++) { michael@0: EXPECT_TRUE(iter2.ConvertOriginalToSkipped(i) == expectSkipped2[i]) << michael@0: "[9] Check mapping of original to skipped for " << i; michael@0: } michael@0: michael@0: uint32_t expectOriginal2[] = { 9, 19, 29 }; michael@0: michael@0: for (uint32_t i = 0; i < mozilla::ArrayLength(expectOriginal2); i++) { michael@0: EXPECT_TRUE(iter2.ConvertSkippedToOriginal(i) == expectOriginal2[i]) << michael@0: "[10] Check mapping of skipped to original for " << i; michael@0: } michael@0: michael@0: return true; michael@0: } michael@0: michael@0: TEST(Gfx, gfxSkipChars) { michael@0: TestConstructor(); michael@0: TestLength(); michael@0: TestIterator(); michael@0: }