blob: 2f8ee899dd694ec8e078d86f83cedd5ce43b01cf [file] [log] [blame]
/*
* Copyright (C) 2014 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "platform/fonts/FontDescription.h"
#include "platform/wtf/Vector.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace blink {
static inline void AssertDescriptionMatchesMask(FontDescription& source,
FontTraitsBitfield bitfield) {
FontDescription target;
target.SetTraits(FontTraits(bitfield));
EXPECT_EQ(source.Style(), target.Style());
EXPECT_EQ(source.Weight(), target.Weight());
EXPECT_EQ(source.Stretch(), target.Stretch());
}
TEST(FontDescriptionTest, TestFontTraits) {
FontDescription source;
source.SetStyle(kFontStyleNormal);
source.SetWeight(kFontWeightNormal);
source.SetStretch(kFontStretchNormal);
AssertDescriptionMatchesMask(source, source.Traits().Bitfield());
source.SetStyle(kFontStyleNormal);
source.SetWeight(kFontWeightNormal);
source.SetStretch(kFontStretchExtraCondensed);
AssertDescriptionMatchesMask(source, source.Traits().Bitfield());
source.SetStyle(kFontStyleItalic);
source.SetWeight(kFontWeight900);
source.SetStretch(kFontStretchUltraExpanded);
AssertDescriptionMatchesMask(source, source.Traits().Bitfield());
source.SetStyle(kFontStyleItalic);
source.SetWeight(kFontWeight100);
source.SetStretch(kFontStretchExtraExpanded);
AssertDescriptionMatchesMask(source, source.Traits().Bitfield());
source.SetStyle(kFontStyleItalic);
source.SetWeight(kFontWeight900);
source.SetStretch(kFontStretchNormal);
AssertDescriptionMatchesMask(source, source.Traits().Bitfield());
source.SetStyle(kFontStyleItalic);
source.SetWeight(kFontWeight800);
source.SetStretch(kFontStretchNormal);
AssertDescriptionMatchesMask(source, source.Traits().Bitfield());
source.SetStyle(kFontStyleItalic);
source.SetWeight(kFontWeight700);
source.SetStretch(kFontStretchNormal);
AssertDescriptionMatchesMask(source, source.Traits().Bitfield());
source.SetStyle(kFontStyleItalic);
source.SetWeight(kFontWeight600);
source.SetStretch(kFontStretchNormal);
AssertDescriptionMatchesMask(source, source.Traits().Bitfield());
source.SetStyle(kFontStyleItalic);
source.SetWeight(kFontWeight500);
source.SetStretch(kFontStretchNormal);
AssertDescriptionMatchesMask(source, source.Traits().Bitfield());
source.SetStyle(kFontStyleItalic);
source.SetWeight(kFontWeight400);
source.SetStretch(kFontStretchNormal);
AssertDescriptionMatchesMask(source, source.Traits().Bitfield());
source.SetStyle(kFontStyleItalic);
source.SetWeight(kFontWeight300);
source.SetStretch(kFontStretchUltraExpanded);
AssertDescriptionMatchesMask(source, source.Traits().Bitfield());
source.SetStyle(kFontStyleItalic);
source.SetWeight(kFontWeight200);
source.SetStretch(kFontStretchNormal);
AssertDescriptionMatchesMask(source, source.Traits().Bitfield());
}
TEST(FontDescriptionTest, TestHashCollision) {
FontWeight weights[] = {
kFontWeight100, kFontWeight200, kFontWeight300,
kFontWeight400, kFontWeight500, kFontWeight600,
kFontWeight700, kFontWeight800, kFontWeight900,
};
FontStretch stretches[]{
kFontStretchUltraCondensed, kFontStretchExtraCondensed,
kFontStretchCondensed, kFontStretchSemiCondensed,
kFontStretchNormal, kFontStretchSemiExpanded,
kFontStretchExpanded, kFontStretchExtraExpanded,
kFontStretchUltraExpanded};
FontStyle styles[] = {kFontStyleNormal, kFontStyleOblique, kFontStyleItalic};
FontDescription source;
WTF::Vector<unsigned> hashes;
for (size_t i = 0; i < WTF_ARRAY_LENGTH(weights); i++) {
source.SetWeight(weights[i]);
for (size_t j = 0; j < WTF_ARRAY_LENGTH(stretches); j++) {
source.SetStretch(stretches[j]);
for (size_t k = 0; k < WTF_ARRAY_LENGTH(styles); k++) {
source.SetStyle(styles[k]);
unsigned hash = source.StyleHashWithoutFamilyList();
ASSERT_FALSE(hashes.Contains(hash));
hashes.push_back(hash);
}
}
}
}
} // namespace blink