diff options
Diffstat (limited to 'gfx/tests/gtest/gfxFontSelectionTests.h')
-rw-r--r-- | gfx/tests/gtest/gfxFontSelectionTests.h | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/gfx/tests/gtest/gfxFontSelectionTests.h b/gfx/tests/gtest/gfxFontSelectionTests.h new file mode 100644 index 000000000..ce1816df8 --- /dev/null +++ b/gfx/tests/gtest/gfxFontSelectionTests.h @@ -0,0 +1,210 @@ +/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * 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/. */ + +/* + * + * This file is #included directly by gfxFontSelectionTest.cpp, and as + * such does not need any #include files or similar. (However, should + * any extra ones be required, it should be ok to do so, as well as + * defining new functions, etc. + * + * To add a new test, call AddTest with the following arguments: the + * CSS font-family string, the gfxFontStyle, an enum (either S_ASCII + * or S_UTF8) indicating the string type, and then the text string + * itself as a string literal. Unfortunately there is no good way to + * embed UTF8 directly into C code, so hex literals will need to be + * placed in the string. Because of the way \x is parsed things like + * "\xabcd" won't work -- you have to do "\xab""cd". "\xab\x01\x03" + * will work fine, though. + * + * The result of AddTest should be assigned to the variable t; after + * AddTest, one or more calls to t->Expect() should be added to define + * the expected result. Multiple Expect() calls in a row for the same + * platform mean that the resulting glyph/font selection items needs + * to have as many items as there are Expect() calls. (See below for + * examples.) + * + * The arguments to Expect are: + * + * platform - a string identifying the platform. + * Valid strings are "win32", "macosx", and "gtk2-pango". + * font - a string (UTF8) giving the unique name of the font. + * See below for how the unique name is constructed. + * glyphs - a set of glyph IDs that are expected. + * This array is constructed using a GLYPHS() macro. + * + * GLYPHS() is just a #define for LiteralArray, which is defined + * in gfxFontSelectionTest.cpp -- if you need more array elements + * than available, just extend LiteralArray with a new constructor + * with the required number of unsigned longs. + * + * The unique font name is a platform-specific constructed string for + * (mostly) identifying a font. On Mac, it's created by taking the + * Postscript name of the font. On Windows, it's created by taking + * the family name, and then appending attributes such as ":Bold", + * ":Italic", etc. + * + * The easiest way to create a test is to add a call to AddTest, and + * then run the test. The output will include a list like: + * + * ==== Test 1 + * expected: + * Run[ 0]: 'Verdana' 73 82 82 + * Run[ 1]: 'MS UI Gothic' 19401 + * Run[ 2]: 'Verdana' 69 68 85 + * Test 1 failed + * + * This gives you the information needed for the calls to Expect() -- + * the unique name, and the glyphs. Appropriate calls to expect for + * the above would be: + * + * t->Expect ("win32", "Verdana", GLYPHS(73, 82, 82)); + * t->Expect ("win32", "MS UI Gothic", GLYPHS(19401)); + * t->Expect ("win32", "Verdana", GLYPHS(69, 68, 85)); + * + */ + + +void +SetupTests(nsTArray<TestEntry>& testList) +{ + TestEntry *t; + + /* some common styles */ + gfxFontStyle style_western_normal_16 (mozilla::gfx::FontStyle::NORMAL, + 400, + 0, + 16.0, + NS_Atomize(NS_LITERAL_STRING("en")), + 0.0, + false, false, + NS_LITERAL_STRING("")); + + gfxFontStyle style_western_bold_16 (mozilla::gfx::FontStyle::NORMAL, + 700, + 0, + 16.0, + NS_Atomize(NS_LITERAL_STRING("en")), + 0.0, + false, false, + NS_LITERAL_STRING("")); + + /* Test 0 */ + t = AddTest (testList, "sans-serif", + style_western_normal_16, + S_ASCII, + "ABCD"); + + t->Expect ("win32", "Arial", GLYPHS(36, 37, 38, 39)); + t->Expect ("macosx", "Helvetica", GLYPHS(36, 37, 38, 39)); + t->Expect ("gtk2-pango", "Albany AMT", GLYPHS(36, 37, 38, 39)); + + /* Test 1 */ + t = AddTest (testList, "verdana,sans-serif", + style_western_normal_16, + S_UTF8, + "foo\xe2\x80\x91""bar"); + + t->Expect ("win32", "Verdana", GLYPHS(73, 82, 82)); + t->Expect ("win32", "Arial Unicode MS", GLYPHS(3236)); + t->Expect ("win32", "Verdana", GLYPHS(69, 68, 85)); + + t->Expect ("macosx", "Verdana", GLYPHS(73, 82, 82)); + t->Expect ("macosx", "Helvetica", GLYPHS(587)); + t->Expect ("macosx", "Verdana", GLYPHS(69, 68, 85)); + + /* Test 2 */ + t = AddTest (testList, "sans-serif", + style_western_bold_16, + S_ASCII, + "ABCD"); + + t->Expect ("win32", "Arial:700", GLYPHS(36, 37, 38, 39)); + t->Expect ("macosx", "Helvetica-Bold", GLYPHS(36, 37, 38, 39)); + t->Expect ("gtk2-pango", "Albany AMT Bold", GLYPHS(36, 37, 38, 39)); + + /* Test 3: RTL Arabic with a ligature and leading and trailing whitespace */ + t = AddTest (testList, "sans-serif", + style_western_normal_16, + S_UTF8, + " \xd8\xaa\xd9\x85 "); + t->SetRTL(); + t->Expect ("macosx", "Helvetica", GLYPHS(3)); + t->Expect ("macosx", "ArialMT", GLYPHS(919, 993)); + t->Expect ("macosx", "Helvetica", GLYPHS(3)); + t->Expect ("win32", "Arial", GLYPHS(3, 919, 994, 3)); + + /* Test 4: LTR Arabic with leading and trailing whitespace */ + t = AddTest (testList, "sans-serif", + style_western_normal_16, + S_UTF8, + " \xd9\x85\xd8\xaa "); + t->Expect ("macosx", "Helvetica", GLYPHS(3)); + t->Expect ("macosx", "ArialMT", GLYPHS(993, 919)); + t->Expect ("macosx", "Helvetica", GLYPHS(3)); + t->Expect ("win32", "Arial", GLYPHS(3, 994, 919, 3)); + + /* Test 5: RTL ASCII with leading whitespace */ + t = AddTest (testList, "sans-serif", + style_western_normal_16, + S_ASCII, + " ab"); + t->SetRTL(); + t->Expect ("macosx", "Helvetica", GLYPHS(3, 68, 69)); + t->Expect ("win32", "Arial", GLYPHS(3, 68, 69)); + t->Expect ("gtk2-pango", "Albany AMT", GLYPHS(3, 68, 69)); + + /* Test 6: RTL ASCII with trailing whitespace */ + t = AddTest (testList, "sans-serif", + style_western_normal_16, + S_ASCII, + "ab "); + t->SetRTL(); + t->Expect ("macosx", "Helvetica", GLYPHS(68, 69, 3)); + t->Expect ("win32", "Arial", GLYPHS(68, 69, 3)); + t->Expect ("gtk2-pango", "Albany AMT", GLYPHS(68, 69, 3)); + + /* Test 7: Simple ASCII ligature */ + /* Do we have a Windows font with ligatures? Can we use DejaVu Sans? */ + t = AddTest (testList, "sans-serif", + style_western_normal_16, + S_ASCII, + "fi"); + t->Expect ("macosx", "Helvetica", GLYPHS(192)); + t->Expect ("win32", "Arial", GLYPHS(73, 76)); + + /* Test 8: DEVANAGARI VOWEL I reordering */ + /* The glyph for DEVANAGARI VOWEL I 2367 (101) is displayed before the glyph for 2361 (99) */ + t = AddTest (testList, "sans-serif", + style_western_normal_16, + S_UTF8, + "\xe0\xa4\x9a\xe0\xa4\xbe\xe0\xa4\xb9\xe0\xa4\xbf\xe0\xa4\x8f"); // 2330 2366 2361 2367 2319 + t->Expect ("macosx", "DevanagariMT", GLYPHS(71, 100, 101, 99, 60)); + t->Expect ("win32", "Mangal", GLYPHS(133, 545, 465, 161, 102)); + + // Disabled Test 9 & 10 because these appear to vary on mac + + /* Test 9: NWJ test */ + //t = AddTest (testList, "Kartika", + // style_western_normal_16, + // S_UTF8, + // "\xe0\xb4\xb3\xe0\xb5\x8d\xe2\x80\x8d"); + //t->Expect ("macosx", "MalayalamMN", GLYPHS(360)); + //t->Expect ("win32", "Kartika", GLYPHS(332)); + + /* Test 10: NWJ fallback test */ + /* it isn't clear what we should actually do in this case. Ideally + we would have the same results as the previous test, but because + we use sans-serif (i.e. Arial) CSS says we should should really + use Arial for U+200D. + */ + //t = AddTest (testList, "sans-serif", + // style_western_normal_16, + // S_UTF8, + // "\xe0\xb4\xb3\xe0\xb5\x8d\xe2\x80\x8d"); + // Disabled because these appear to vary + //t->Expect ("macosx", "MalayalamMN", GLYPHS(360)); + //t->Expect ("win32", "Kartika", GLYPHS(332)); +} |