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

Unified Diff: ppapi/tests/test_char_set.cc

Issue 9348069: Move the charset inteface to "trusted" (we can't implement this efficiently (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 10 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_char_set.cc
diff --git a/ppapi/tests/test_char_set.cc b/ppapi/tests/test_char_set.cc
index b1bbe545c55f5cf839b53e2f69f4cc153f2e2b6d..74912ecf6120cb13f418c9775bb0fd977273a6bd 100644
--- a/ppapi/tests/test_char_set.cc
+++ b/ppapi/tests/test_char_set.cc
@@ -5,6 +5,7 @@
#include "ppapi/tests/test_char_set.h"
#include "ppapi/c/dev/ppb_char_set_dev.h"
+#include "ppapi/c/trusted/ppb_char_set_trusted.h"
#include "ppapi/cpp/dev/memory_dev.h"
#include "ppapi/cpp/module.h"
#include "ppapi/tests/testing_instance.h"
@@ -19,16 +20,21 @@ TestCharSet::TestCharSet(TestingInstance* instance)
bool TestCharSet::Init() {
char_set_interface_ = static_cast<const PPB_CharSet_Dev*>(
pp::Module::Get()->GetBrowserInterface(PPB_CHAR_SET_DEV_INTERFACE));
- return !!char_set_interface_;
+ char_set_trusted_interface_ = static_cast<const PPB_CharSet_Trusted*>(
+ pp::Module::Get()->GetBrowserInterface(PPB_CHARSET_TRUSTED_INTERFACE));
+ return char_set_interface_ && char_set_trusted_interface_;
}
void TestCharSet::RunTests(const std::string& filter) {
+ RUN_TEST(UTF16ToCharSetDeprecated, filter);
RUN_TEST(UTF16ToCharSet, filter);
+ RUN_TEST(CharSetToUTF16Deprecated, filter);
RUN_TEST(CharSetToUTF16, filter);
RUN_TEST(GetDefaultCharSet, filter);
}
-std::string TestCharSet::TestUTF16ToCharSet() {
+// TODO(brettw) remove this when the old interface is removed.
+std::string TestCharSet::TestUTF16ToCharSetDeprecated() {
// Empty string.
std::vector<uint16_t> utf16;
utf16.push_back(0);
@@ -102,7 +108,117 @@ std::string TestCharSet::TestUTF16ToCharSet() {
PASS();
}
-std::string TestCharSet::TestCharSetToUTF16() {
+std::string TestCharSet::TestUTF16ToCharSet() {
+ // Empty string.
+ std::vector<uint16_t> utf16;
+ utf16.push_back(0);
+ std::string output_buffer;
+ uint32_t utf8result_len = static_cast<uint32_t>(output_buffer.size());
+ PP_Bool result = char_set_trusted_interface_->UTF16ToCharSet(
+ &utf16[0], 0, "latin1", PP_CHARSET_TRUSTED_CONVERSIONERROR_SUBSTITUTE,
+ &output_buffer[0], &utf8result_len);
+ ASSERT_TRUE(result == PP_TRUE);
+ ASSERT_TRUE(utf8result_len == 0);
+
+ // No output buffer size returns length of string.
bbudge 2012/02/08 21:56:58 Null output buffer returns length of...
+ utf16 = UTF8ToUTF16("hello");
+ utf8result_len = 0;
+ result = char_set_trusted_interface_->UTF16ToCharSet(
+ &utf16[0], static_cast<uint32_t>(utf16.size()), "latin1",
+ PP_CHARSET_TRUSTED_CONVERSIONERROR_SUBSTITUTE, NULL, &utf8result_len);
+ ASSERT_TRUE(result == PP_TRUE);
+ ASSERT_TRUE(utf8result_len == 5);
+
+ // Giving too small of a buffer just fills in that many items and gives us
+ // the desired size.
+ output_buffer.resize(100);
+ utf8result_len = 2;
+ output_buffer[utf8result_len] = '$'; // Barrier character.
+ result = char_set_trusted_interface_->UTF16ToCharSet(
+ &utf16[0], static_cast<uint32_t>(utf16.size()), "latin1",
+ PP_CHARSET_TRUSTED_CONVERSIONERROR_SUBSTITUTE,
+ &output_buffer[0], &utf8result_len);
+ ASSERT_TRUE(result == PP_TRUE);
+ ASSERT_TRUE(utf8result_len == 5);
+ ASSERT_TRUE(output_buffer[0] == 'h' && output_buffer[1] == 'e' &&
+ output_buffer[2] == '$');
+
+ // Try round-tripping some English & Chinese from UTF-8 through UTF-16
+ std::string utf8source("Hello, world. \xe4\xbd\xa0\xe5\xa5\xbd");
+ utf16 = UTF8ToUTF16(utf8source);
+ output_buffer.resize(100);
+ utf8result_len = static_cast<uint32_t>(output_buffer.size());
+ result = char_set_trusted_interface_->UTF16ToCharSet(
+ &utf16[0], static_cast<uint32_t>(utf16.size()),
+ "Utf-8", PP_CHARSET_TRUSTED_CONVERSIONERROR_FAIL,
+ &output_buffer[0], &utf8result_len);
+ ASSERT_TRUE(result == PP_TRUE);
+ output_buffer.resize(utf8result_len);
+ ASSERT_TRUE(utf8source == output_buffer);
+
+ // Test an un-encodable character with various modes.
+ utf16 = UTF8ToUTF16("h\xe4\xbd\xa0i");
+
+ // Fail mode, size should get 0'ed on failure.
+ output_buffer.resize(100);
+ utf8result_len = static_cast<uint32_t>(output_buffer.size());
+ result = char_set_trusted_interface_->UTF16ToCharSet(
+ &utf16[0], static_cast<uint32_t>(utf16.size()),
+ "latin1", PP_CHARSET_TRUSTED_CONVERSIONERROR_FAIL,
+ &output_buffer[0], &utf8result_len);
+ ASSERT_TRUE(result == PP_FALSE);
+ ASSERT_TRUE(utf8result_len == 0);
+
+ // Skip mode.
+ output_buffer.resize(100);
+ utf8result_len = static_cast<uint32_t>(output_buffer.size());
+ result = char_set_trusted_interface_->UTF16ToCharSet(
+ &utf16[0], static_cast<uint32_t>(utf16.size()),
+ "latin1", PP_CHARSET_TRUSTED_CONVERSIONERROR_SKIP,
+ &output_buffer[0], &utf8result_len);
+ ASSERT_TRUE(result == PP_TRUE);
+ ASSERT_TRUE(utf8result_len == 2);
+ ASSERT_TRUE(output_buffer[0] == 'h' && output_buffer[1] == 'i');
+
+ // Substitute mode.
+ output_buffer.resize(100);
+ utf8result_len = static_cast<uint32_t>(output_buffer.size());
+ result = char_set_trusted_interface_->UTF16ToCharSet(
+ &utf16[0], static_cast<uint32_t>(utf16.size()),
+ "latin1", PP_CHARSET_TRUSTED_CONVERSIONERROR_SUBSTITUTE,
+ &output_buffer[0], &utf8result_len);
+ ASSERT_TRUE(utf8result_len == 3);
+ output_buffer.resize(utf8result_len);
+ ASSERT_TRUE(output_buffer == "h?i");
+
+ // Try some invalid input encoding.
+ output_buffer.resize(100);
+ utf8result_len = static_cast<uint32_t>(output_buffer.size());
+ utf16.clear();
+ utf16.push_back(0xD800); // High surrogate.
+ utf16.push_back('A'); // Not a low surrogate.
+ result = char_set_trusted_interface_->UTF16ToCharSet(
+ &utf16[0], static_cast<uint32_t>(utf16.size()),
+ "latin1", PP_CHARSET_TRUSTED_CONVERSIONERROR_SUBSTITUTE,
+ &output_buffer[0], &utf8result_len);
+ ASSERT_TRUE(utf8result_len == 2);
+ ASSERT_TRUE(output_buffer[0] == '?' && output_buffer[1] == 'A');
+
+ // Invalid encoding name.
+ output_buffer.resize(100);
+ utf8result_len = static_cast<uint32_t>(output_buffer.size());
+ result = char_set_trusted_interface_->UTF16ToCharSet(
+ &utf16[0], static_cast<uint32_t>(utf16.size()),
+ "poopiepants", PP_CHARSET_TRUSTED_CONVERSIONERROR_SUBSTITUTE,
+ &output_buffer[0], &utf8result_len);
+ ASSERT_TRUE(result == PP_FALSE);
+ ASSERT_TRUE(utf8result_len == 0);
+
+ PASS();
+}
+
+// TODO(brettw) remove this when the old interface is removed.
+std::string TestCharSet::TestCharSetToUTF16Deprecated() {
pp::Memory_Dev memory;
// Empty string.
@@ -166,6 +282,74 @@ std::string TestCharSet::TestCharSetToUTF16() {
PASS();
}
+std::string TestCharSet::TestCharSetToUTF16() {
+ std::vector<uint16_t> output_buffer;
+ output_buffer.resize(100);
+
+ // Empty string.
+ output_buffer.resize(100);
+ uint32_t utf16result_len = static_cast<uint32_t>(output_buffer.size());
+ PP_Bool result = char_set_trusted_interface_->CharSetToUTF16(
+ "", 0, "latin1", PP_CHARSET_TRUSTED_CONVERSIONERROR_FAIL,
+ &output_buffer[0], &utf16result_len);
+ ASSERT_TRUE(result);
+ ASSERT_TRUE(utf16result_len == 0);
+ ASSERT_TRUE(output_buffer[0] == 0);
+
+ // Basic Latin1.
+ output_buffer.resize(100);
+ utf16result_len = static_cast<uint32_t>(output_buffer.size());
+ char latin1[] = "H\xef";
+ result = char_set_trusted_interface_->CharSetToUTF16(
+ latin1, 2, "latin1", PP_CHARSET_TRUSTED_CONVERSIONERROR_FAIL,
+ &output_buffer[0], &utf16result_len);
+ ASSERT_TRUE(result);
+ ASSERT_TRUE(utf16result_len == 2);
+ ASSERT_TRUE(output_buffer[0] == 'H' && output_buffer[1] == 0xef);
+
+ // Invalid input encoding with FAIL.
+ output_buffer.resize(100);
+ utf16result_len = static_cast<uint32_t>(output_buffer.size());
+ char badutf8[] = "A\xe4Z";
+ result = char_set_trusted_interface_->CharSetToUTF16(
+ badutf8, 3, "utf8", PP_CHARSET_TRUSTED_CONVERSIONERROR_FAIL,
+ &output_buffer[0], &utf16result_len);
+ ASSERT_TRUE(!result);
+ ASSERT_TRUE(utf16result_len == 0);
+
+ // Invalid input with SKIP.
+ output_buffer.resize(100);
+ utf16result_len = static_cast<uint32_t>(output_buffer.size());
+ result = char_set_trusted_interface_->CharSetToUTF16(
+ badutf8, 3, "utf8", PP_CHARSET_TRUSTED_CONVERSIONERROR_SKIP,
+ &output_buffer[0], &utf16result_len);
+ ASSERT_TRUE(result);
+ ASSERT_TRUE(utf16result_len == 2);
+ ASSERT_TRUE(output_buffer[0] == 'A' && output_buffer[1] == 'Z');
+
+ // Invalid input with SUBSTITUTE.
+ output_buffer.resize(100);
+ utf16result_len = static_cast<uint32_t>(output_buffer.size());
+ result = char_set_trusted_interface_->CharSetToUTF16(
+ badutf8, 3, "utf8", PP_CHARSET_TRUSTED_CONVERSIONERROR_SUBSTITUTE,
+ &output_buffer[0], &utf16result_len);
+ ASSERT_TRUE(result);
+ ASSERT_TRUE(utf16result_len == 3);
+ ASSERT_TRUE(output_buffer[0] == 'A' && output_buffer[1] == 0xFFFD &&
+ output_buffer[2] == 'Z');
+
+ // Invalid encoding name.
+ output_buffer.resize(100);
+ utf16result_len = static_cast<uint32_t>(output_buffer.size());
+ result = char_set_trusted_interface_->CharSetToUTF16(
+ badutf8, 3, "poopiepants", PP_CHARSET_TRUSTED_CONVERSIONERROR_SUBSTITUTE,
+ &output_buffer[0], &utf16result_len);
+ ASSERT_TRUE(!result);
+ ASSERT_TRUE(utf16result_len == 0);
+
+ PASS();
+}
+
std::string TestCharSet::TestGetDefaultCharSet() {
// Test invalid instance.
pp::Var result(pp::Var::PassRef(), char_set_interface_->GetDefaultCharSet(0));

Powered by Google App Engine
This is Rietveld 408576698