Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(665)

Unified Diff: ppapi/tests/test_browser_font.cc

Issue 10658037: Implement right-to-left text rendering in Pepper. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: <PATCH DESCRIPTION HERE> Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/tests/test_browser_font.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « ppapi/tests/test_browser_font.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698