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
16DurationFormatTest::DurationFormatTest()
17{
18}
19
20
21DurationFormatTest::~DurationFormatTest()
22{
23}
24
25
26void
27DurationFormatTest::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
42void
43DurationFormatTest::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
96void
97DurationFormatTest::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
129DurationFormatTest::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