1 /*
2 * Copyright 2014 Haiku, Inc.
3 * Distributed under the terms of the MIT License.
4 */
5
6
7 #include "DurationFormatTest.h"
8
9 #include <DurationFormat.h>
10 #include <Locale.h>
11
12 #include <cppunit/TestCaller.h>
13 #include <cppunit/TestSuite.h>
14
15
DurationFormatTest()16 DurationFormatTest::DurationFormatTest()
17 {
18 }
19
20
~DurationFormatTest()21 DurationFormatTest::~DurationFormatTest()
22 {
23 }
24
25
26 void
TestDefault()27 DurationFormatTest::TestDefault()
28 {
29 BDurationFormat format;
30 BString buffer;
31 BString expected;
32
33 status_t result = format.Format(buffer, 0, 800000000000ll);
34 CPPUNIT_ASSERT_EQUAL(B_OK, result);
35 // The exact format and language used depends on the locale settings, but
36 // we can assume that whatever they are, it should put something in the
37 // string.
38 CPPUNIT_ASSERT(buffer.Length() > 0);
39 }
40
41
42 void
TestDuration()43 DurationFormatTest::TestDuration()
44 {
45 BString buffer;
46 BString expected;
47 status_t result;
48
49 BFormattingConventions englishFormat("en_US");
50 BLanguage englishLanguage("en");
51
52 BFormattingConventions frenchFormat("fr_FR");
53 BLanguage frenchLanguage("fr");
54
55 {
56 BDurationFormat format(englishLanguage, englishFormat);
57 status_t result = format.Format(buffer, 0, 800000000000ll);
58
59 expected << "1 week, 2 days, 6 hours, 13 minutes, 20 seconds";
60 CPPUNIT_ASSERT_EQUAL(B_OK, result);
61 CPPUNIT_ASSERT_EQUAL(expected, buffer);
62 }
63
64 {
65 BDurationFormat format(frenchLanguage, frenchFormat);
66 result = format.Format(buffer, 0, 800000000000ll);
67
68 // We check that the passed BString is not truncated.
69 expected << "1 semaine, 2 jours, 6 heures, 13 minutes, 20 secondes";
70 CPPUNIT_ASSERT_EQUAL(B_OK, result);
71 CPPUNIT_ASSERT_EQUAL(expected, buffer);
72 }
73
74 {
75 BDurationFormat format(englishLanguage, englishFormat,
76 ":", B_TIME_UNIT_ABBREVIATED);
77 status_t result = format.Format(buffer, 0, 800000000000ll);
78
79 expected << "1 wk:2 days:6 hr:13 min:20 sec";
80 CPPUNIT_ASSERT_EQUAL(B_OK, result);
81 CPPUNIT_ASSERT_EQUAL(expected, buffer);
82 }
83
84 {
85 BDurationFormat format(frenchLanguage, frenchFormat,
86 ":", B_TIME_UNIT_ABBREVIATED);
87 result = format.Format(buffer, 0, 800000000000ll);
88
89 expected << "1 sem.:2 j:6 h:13 min:20 s";
90 CPPUNIT_ASSERT_EQUAL(B_OK, result);
91 CPPUNIT_ASSERT_EQUAL(expected, buffer);
92 }
93 }
94
95
96 void
TestTimeUnit()97 DurationFormatTest::TestTimeUnit()
98 {
99 BString buffer;
100 status_t result;
101
102 BFormattingConventions englishFormat("en_US");
103 BLanguage englishLanguage("en");
104
105 BFormattingConventions frenchFormat("fr_FR");
106 BLanguage frenchLanguage("fr");
107
108 {
109 BTimeUnitFormat format(englishLanguage, englishFormat);
110 result = format.Format(buffer, 5, B_TIME_UNIT_HOUR);
111
112 CPPUNIT_ASSERT_EQUAL(B_OK, result);
113 CPPUNIT_ASSERT_EQUAL(BString("5 hours"), buffer);
114 }
115
116 {
117 BTimeUnitFormat format(frenchLanguage, frenchFormat);
118 result = format.Format(buffer, 5, B_TIME_UNIT_HOUR);
119
120 CPPUNIT_ASSERT_EQUAL(B_OK, result);
121 // We check that the passed BString is not truncated. This makes it easy
122 // to append several units to the same string, as BDurationFormat does.
123 CPPUNIT_ASSERT_EQUAL(BString("5 hours5 heures"), buffer);
124 }
125 }
126
127
128 /*static*/ void
AddTests(BTestSuite & parent)129 DurationFormatTest::AddTests(BTestSuite& parent)
130 {
131 CppUnit::TestSuite& suite = *new CppUnit::TestSuite("DurationFormatTest");
132
133 suite.addTest(new CppUnit::TestCaller<DurationFormatTest>(
134 "DurationFormatTest::TestDefault", &DurationFormatTest::TestDefault));
135 suite.addTest(new CppUnit::TestCaller<DurationFormatTest>(
136 "DurationFormatTest::TestDuration", &DurationFormatTest::TestDuration));
137 suite.addTest(new CppUnit::TestCaller<DurationFormatTest>(
138 "DurationFormatTest::TestTimeUnit", &DurationFormatTest::TestTimeUnit));
139
140 parent.addTest("DurationFormatTest", &suite);
141 }
142