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

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: tests 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
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..7c6614662254a023af1c467b876affa655079935 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,6 +18,7 @@ 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);
RUN_TEST(Draw, filter);
viettrungluu 2012/06/27 20:34:28 You forgot CharPosRTL.
}
@@ -54,6 +53,52 @@ 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, than two of LTR.
viettrungluu 2012/06/27 20:33:58 s/than/then/
+ // 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 UTF8, the two RTL chars are two bytes each.
viettrungluu 2012/06/27 20:33:58 Nit: "UTF8" or "UTF-8"?
+ 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[2] > len[1]);
viettrungluu 2012/06/27 20:33:58 Instead of this convoluted logic, I don't see why
+
+ // Next char should be between the previous two (since it's going RTL).
+ ASSERT_TRUE(len[3] < len[2] && len[3] > len[1]);
+
+ // Last two chars should be increasing again.
+ ASSERT_TRUE(len[4] > len[2] && len[4] > len[3]);
+ ASSERT_TRUE(len[4] > len[3]);
+
+ // 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 +116,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[cur_char]) {
+ // 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;

Powered by Google App Engine
This is Rietveld 408576698