| Index: ppapi/tests/test_browser_font.cc
|
| diff --git a/ppapi/tests/test_browser_font.cc b/ppapi/tests/test_browser_font.cc
|
| index 9f3a2e07044d742670063a50c36f5e56ab4356eb..8fc4104e6a1549c670794e8b199cea10d18247e0 100644
|
| --- a/ppapi/tests/test_browser_font.cc
|
| +++ b/ppapi/tests/test_browser_font.cc
|
| @@ -4,8 +4,6 @@
|
|
|
| #include "ppapi/tests/test_browser_font.h"
|
|
|
| -#include <stdio.h>// ERASEME
|
| -
|
| #include "ppapi/tests/test_utils.h"
|
| #include "ppapi/tests/testing_instance.h"
|
| #include "ppapi/cpp/image_data.h"
|
| @@ -20,7 +18,11 @@ bool TestBrowserFont::Init() {
|
| void TestBrowserFont::RunTests(const std::string& filter) {
|
| RUN_TEST(FontFamilies, filter);
|
| RUN_TEST(Measure, filter);
|
| + RUN_TEST(MeasureRTL, filter);
|
| RUN_TEST(CharPos, filter);
|
| + // This test is disabled. It doesn't currently pass. See the
|
| + // CharacterOffsetForPixel API.
|
| + //RUN_TEST(CharPosRTL, filter);
|
| RUN_TEST(Draw, filter);
|
| }
|
|
|
| @@ -54,6 +56,48 @@ std::string TestBrowserFont::TestMeasure() {
|
| PASS();
|
| }
|
|
|
| +std::string TestBrowserFont::TestMeasureRTL() {
|
| + pp::BrowserFontDescription desc;
|
| + pp::BrowserFont_Trusted font(instance_, desc);
|
| +
|
| + // Mixed string, two chars of LTR, two of RTL, then two of LTR.
|
| + // Note this is in UTF-8 so has more than 6 bytes.
|
| + std::string mixed("AB\xd7\x94\xd7\x97ZZ");
|
| + const int kNumChars = 6;
|
| + pp::BrowserFontTextRun run(mixed);
|
| +
|
| + // Note that since this is UTF-8, the two RTL chars are two bytes each.
|
| + int32_t len[kNumChars];
|
| + len[0] = font.PixelOffsetForCharacter(run, 0);
|
| + len[1] = font.PixelOffsetForCharacter(run, 1);
|
| + len[2] = font.PixelOffsetForCharacter(run, 2);
|
| + len[3] = font.PixelOffsetForCharacter(run, 3);
|
| + len[4] = font.PixelOffsetForCharacter(run, 4);
|
| + len[5] = font.PixelOffsetForCharacter(run, 5);
|
| +
|
| + // First three chars should be increasing.
|
| + ASSERT_TRUE(len[0] >= 0);
|
| + ASSERT_TRUE(len[1] > len[0]);
|
| + ASSERT_TRUE(len[3] > len[1]);
|
| + ASSERT_TRUE(len[2] > len[3]);
|
| + ASSERT_TRUE(len[4] > len[2]);
|
| + ASSERT_TRUE(len[5] > len[4]);
|
| +
|
| + // Test the same sequence with force LTR. The offsets should appear in
|
| + // sequence.
|
| + pp::BrowserFontTextRun forced_run(mixed, false, true);
|
| + len[0] = font.PixelOffsetForCharacter(forced_run, 0);
|
| + len[1] = font.PixelOffsetForCharacter(forced_run, 1);
|
| + len[2] = font.PixelOffsetForCharacter(forced_run, 2);
|
| + len[3] = font.PixelOffsetForCharacter(forced_run, 3);
|
| + len[4] = font.PixelOffsetForCharacter(forced_run, 4);
|
| + len[5] = font.PixelOffsetForCharacter(forced_run, 5);
|
| + for (int i = 1; i < kNumChars; i++)
|
| + ASSERT_TRUE(len[i] > len[i - 1]);
|
| +
|
| + PASS();
|
| +}
|
| +
|
| // Tests that the character/pixel offset functions correctly round-trip.
|
| std::string TestBrowserFont::TestCharPos() {
|
| pp::BrowserFontDescription desc;
|
| @@ -71,6 +115,48 @@ std::string TestBrowserFont::TestCharPos() {
|
| PASS();
|
| }
|
|
|
| +// Tests that we can get character positions in a mixed LTR/RTL run.
|
| +std::string TestBrowserFont::TestCharPosRTL() {
|
| + pp::BrowserFontDescription desc;
|
| + pp::BrowserFont_Trusted font(instance_, desc);
|
| +
|
| + // Mixed string, two chars of LTR, two of RTL, than two of LTR.
|
| + // Note this is in UTF-8 so has more than 6 bytes.
|
| + std::string mixed("AB\xd7\x94\xd7\x97ZZ");
|
| +
|
| + pp::BrowserFontTextRun run(mixed);
|
| + static const int kNumChars = 6;
|
| + int expected_char_sequence[kNumChars] = { 0, 1, 3, 2, 4, 5 };
|
| +
|
| + // Check that the characters appear in the order we expect.
|
| + int pixel_width = font.MeasureText(pp::BrowserFontTextRun(mixed));
|
| + int last_sequence = 0; // Index into expected_char_sequence.
|
| + for (int x = 0; x < pixel_width; x++) {
|
| + int cur_char = font.CharacterOffsetForPixel(run, x);
|
| + if (cur_char != expected_char_sequence[last_sequence]) {
|
| + // This pixel has a different character. It should be the next one in
|
| + // the sequence for it to be correct.
|
| + last_sequence++;
|
| + ASSERT_TRUE(last_sequence < kNumChars);
|
| + ASSERT_TRUE(cur_char == expected_char_sequence[last_sequence]);
|
| + }
|
| + }
|
| +
|
| + // Try the same string with force LTR. The characters should all appear in
|
| + // sequence.
|
| + pp::BrowserFontTextRun forced_run(mixed, false, true);
|
| + int last_forced_char = 0; // Char index into the forced sequence.
|
| + for (int x = 0; x < pixel_width; x++) {
|
| + int cur_char = font.CharacterOffsetForPixel(forced_run, x);
|
| + if (cur_char != last_forced_char) {
|
| + last_forced_char++;
|
| + ASSERT_TRUE(cur_char == last_forced_char);
|
| + }
|
| + }
|
| +
|
| + PASS();
|
| +}
|
| +
|
| // Tests that drawing some text produces "some" output.
|
| std::string TestBrowserFont::TestDraw() {
|
| pp::BrowserFontDescription desc;
|
|
|