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

Unified Diff: source/test/intltest/simplepatternformattertest.cpp

Issue 845603002: Update ICU to 54.1 step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@master
Patch Set: remove unusued directories Created 5 years, 11 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 | « source/test/intltest/selfmts.cpp ('k') | source/test/intltest/ssearch.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/test/intltest/simplepatternformattertest.cpp
diff --git a/source/test/intltest/simplepatternformattertest.cpp b/source/test/intltest/simplepatternformattertest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a530c5229186d1670d7ceb6ec4dba3d12652e15f
--- /dev/null
+++ b/source/test/intltest/simplepatternformattertest.cpp
@@ -0,0 +1,240 @@
+/*
+*******************************************************************************
+* Copyright (C) 2014, International Business Machines Corporation and *
+* others. All Rights Reserved. *
+*******************************************************************************
+*
+* File SIMPLEPATTERNFORMATTERTEST.CPP
+*
+********************************************************************************
+*/
+#include "cstring.h"
+#include "intltest.h"
+#include "simplepatternformatter.h"
+
+class SimplePatternFormatterTest : public IntlTest {
+public:
+ SimplePatternFormatterTest() {
+ }
+ void TestNoPlaceholders();
+ void TestOnePlaceholder();
+ void TestManyPlaceholders();
+ void TestGetPatternWithNoPlaceholders();
+ void TestOptimization();
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
+private:
+};
+
+void SimplePatternFormatterTest::runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par*/) {
+ TESTCASE_AUTO_BEGIN;
+ TESTCASE_AUTO(TestNoPlaceholders);
+ TESTCASE_AUTO(TestOnePlaceholder);
+ TESTCASE_AUTO(TestManyPlaceholders);
+ TESTCASE_AUTO(TestGetPatternWithNoPlaceholders);
+ TESTCASE_AUTO(TestOptimization);
+ TESTCASE_AUTO_END;
+}
+
+void SimplePatternFormatterTest::TestNoPlaceholders() {
+ UErrorCode status = U_ZERO_ERROR;
+ SimplePatternFormatter fmt("This doesn''t have templates '{0}");
+ assertEquals("PlaceholderCount", 0, fmt.getPlaceholderCount());
+ UnicodeString appendTo;
+ assertEquals(
+ "format",
+ "This doesn't have templates {0}",
+ fmt.format("unused", appendTo, status));
+ fmt.compile("This has {} bad {012d placeholders", status);
+ assertEquals("PlaceholderCount", 0, fmt.getPlaceholderCount());
+ appendTo.remove();
+ assertEquals(
+ "format",
+ "This has {} bad {012d placeholders",
+ fmt.format("unused", appendTo, status));
+ assertSuccess("Status", status);
+}
+
+void SimplePatternFormatterTest::TestOnePlaceholder() {
+ UErrorCode status = U_ZERO_ERROR;
+ SimplePatternFormatter fmt;
+ fmt.compile("{0} meter", status);
+ assertEquals("PlaceholderCount", 1, fmt.getPlaceholderCount());
+ UnicodeString appendTo;
+ assertEquals(
+ "format",
+ "1 meter",
+ fmt.format("1", appendTo, status));
+ assertSuccess("Status", status);
+
+ // assignment
+ SimplePatternFormatter s;
+ s = fmt;
+ appendTo.remove();
+ assertEquals(
+ "Assignment",
+ "1 meter",
+ s.format("1", appendTo, status));
+
+ // Copy constructor
+ SimplePatternFormatter r(fmt);
+ appendTo.remove();
+ assertEquals(
+ "Copy constructor",
+ "1 meter",
+ r.format("1", appendTo, status));
+ assertSuccess("Status", status);
+}
+
+void SimplePatternFormatterTest::TestManyPlaceholders() {
+ UErrorCode status = U_ZERO_ERROR;
+ SimplePatternFormatter fmt;
+ fmt.compile(
+ "Templates {2}{1}{5} and {4} are out of order.", status);
+ assertSuccess("Status", status);
+ assertFalse("startsWithPlaceholder", fmt.startsWithPlaceholder(2));
+ assertEquals("PlaceholderCount", 6, fmt.getPlaceholderCount());
+ UnicodeString values[] = {
+ "freddy", "tommy", "frog", "billy", "leg", "{0}"};
+ UnicodeString *params[] = {
+ &values[0], &values[1], &values[2], &values[3], &values[4], &values[5]};
+ int32_t offsets[6];
+ int32_t expectedOffsets[6] = {-1, 22, 18, -1, 35, 27};
+ UnicodeString appendTo("Prefix: ");
+ assertEquals(
+ "format",
+ "Prefix: Templates frogtommy{0} and leg are out of order.",
+ fmt.format(
+ params,
+ UPRV_LENGTHOF(params),
+ appendTo,
+ offsets,
+ UPRV_LENGTHOF(offsets),
+ status));
+ assertSuccess("Status", status);
+ for (int32_t i = 0; i < UPRV_LENGTHOF(expectedOffsets); ++i) {
+ if (expectedOffsets[i] != offsets[i]) {
+ errln("Expected %d, got %d", expectedOffsets[i], offsets[i]);
+ }
+ }
+ appendTo.remove();
+
+ // Not having enough placeholder params results in error.
+ fmt.format(
+ params,
+ UPRV_LENGTHOF(params) - 1,
+ appendTo,
+ offsets,
+ UPRV_LENGTHOF(offsets),
+ status);
+ if (status != U_ILLEGAL_ARGUMENT_ERROR) {
+ errln("Expected U_ILLEGAL_ARGUMENT_ERROR");
+ }
+
+ // Ensure we don't write to offsets array beyond its length.
+ status = U_ZERO_ERROR;
+ offsets[UPRV_LENGTHOF(offsets) - 1] = 289;
+ appendTo.remove();
+ fmt.format(
+ params,
+ UPRV_LENGTHOF(params),
+ appendTo,
+ offsets,
+ UPRV_LENGTHOF(offsets) - 1,
+ status);
+ assertEquals("Offsets buffer length", 289, offsets[UPRV_LENGTHOF(offsets) - 1]);
+
+ // Test assignment
+ SimplePatternFormatter s;
+ s = fmt;
+ appendTo.remove();
+ assertEquals(
+ "Assignment",
+ "Templates frogtommy{0} and leg are out of order.",
+ s.format(
+ params,
+ UPRV_LENGTHOF(params),
+ appendTo,
+ NULL,
+ 0,
+ status));
+
+ // Copy constructor
+ SimplePatternFormatter r(fmt);
+ appendTo.remove();
+ assertEquals(
+ "Copy constructor",
+ "Templates frogtommy{0} and leg are out of order.",
+ r.format(
+ params,
+ UPRV_LENGTHOF(params),
+ appendTo,
+ NULL,
+ 0,
+ status));
+ r.compile("{0} meter", status);
+ assertEquals("PlaceholderCount", 1, r.getPlaceholderCount());
+ appendTo.remove();
+ assertEquals(
+ "Replace with new compile",
+ "freddy meter",
+ r.format("freddy", appendTo, status));
+ r.compile("{0}, {1}", status);
+ assertEquals("PlaceholderCount", 2, r.getPlaceholderCount());
+ appendTo.remove();
+ assertEquals(
+ "2 arg",
+ "foo, bar",
+ r.format("foo", "bar", appendTo, status));
+ r.compile("{0}, {1} and {2}", status);
+ assertEquals("PlaceholderCount", 3, r.getPlaceholderCount());
+ appendTo.remove();
+ assertEquals(
+ "3 arg",
+ "foo, bar and baz",
+ r.format("foo", "bar", "baz", appendTo, status));
+ assertSuccess("Status", status);
+}
+
+void SimplePatternFormatterTest::TestGetPatternWithNoPlaceholders() {
+ SimplePatternFormatter fmt("{0} has no {1} placeholders.");
+ assertEquals(
+ "", " has no placeholders.", fmt.getPatternWithNoPlaceholders());
+}
+
+void SimplePatternFormatterTest::TestOptimization() {
+ UErrorCode status = U_ZERO_ERROR;
+ SimplePatternFormatter fmt;
+ fmt.compile("{2}, {0}, {1} and {3}", status);
+ assertSuccess("Status", status);
+ assertTrue("startsWithPlaceholder", fmt.startsWithPlaceholder(2));
+ assertFalse("startsWithPlaceholder", fmt.startsWithPlaceholder(0));
+ UnicodeString values[] = {
+ "freddy", "frog", "leg", "by"};
+ UnicodeString *params[] = {
+ &values[0], &values[1], &values[2], &values[3]};
+ int32_t offsets[4];
+ int32_t expectedOffsets[4] = {5, 13, 0, 22};
+
+ // The pattern starts with {2}, so format should append the result of
+ // the rest of the pattern to values[2], the value for {2}.
+ assertEquals(
+ "format",
+ "leg, freddy, frog and by",
+ fmt.format(
+ params,
+ UPRV_LENGTHOF(params),
+ values[2],
+ offsets,
+ UPRV_LENGTHOF(offsets),
+ status));
+ assertSuccess("Status", status);
+ for (int32_t i = 0; i < UPRV_LENGTHOF(expectedOffsets); ++i) {
+ if (expectedOffsets[i] != offsets[i]) {
+ errln("Expected %d, got %d", expectedOffsets[i], offsets[i]);
+ }
+ }
+}
+
+extern IntlTest *createSimplePatternFormatterTest() {
+ return new SimplePatternFormatterTest();
+}
« no previous file with comments | « source/test/intltest/selfmts.cpp ('k') | source/test/intltest/ssearch.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698