xref: /aosp_15_r20/external/pigweed/pw_cli/py/plural_test.py (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker#!/usr/bin/env python3
2*61c4878aSAndroid Build Coastguard Worker# Copyright 2024 The Pigweed Authors
3*61c4878aSAndroid Build Coastguard Worker#
4*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not
5*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of
6*61c4878aSAndroid Build Coastguard Worker# the License at
7*61c4878aSAndroid Build Coastguard Worker#
8*61c4878aSAndroid Build Coastguard Worker#     https://www.apache.org/licenses/LICENSE-2.0
9*61c4878aSAndroid Build Coastguard Worker#
10*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
11*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under
14*61c4878aSAndroid Build Coastguard Worker# the License.
15*61c4878aSAndroid Build Coastguard Worker"""Tests for general purpose tools."""
16*61c4878aSAndroid Build Coastguard Worker
17*61c4878aSAndroid Build Coastguard Workerimport unittest
18*61c4878aSAndroid Build Coastguard Worker
19*61c4878aSAndroid Build Coastguard Workerfrom pw_cli.plural import plural
20*61c4878aSAndroid Build Coastguard Worker
21*61c4878aSAndroid Build Coastguard Worker
22*61c4878aSAndroid Build Coastguard Workerclass PluralTest(unittest.TestCase):
23*61c4878aSAndroid Build Coastguard Worker    """Test the plural function, which adds an 's' to nouns."""
24*61c4878aSAndroid Build Coastguard Worker
25*61c4878aSAndroid Build Coastguard Worker    def test_single_list(self):
26*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('1 item', plural([1], 'item'))
27*61c4878aSAndroid Build Coastguard Worker
28*61c4878aSAndroid Build Coastguard Worker    def test_single_count(self):
29*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('1 item', plural(1, 'item'))
30*61c4878aSAndroid Build Coastguard Worker
31*61c4878aSAndroid Build Coastguard Worker    def test_multiple_list(self):
32*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('3 items', plural([1, 2, 3], 'item'))
33*61c4878aSAndroid Build Coastguard Worker
34*61c4878aSAndroid Build Coastguard Worker    def test_multiple_count(self):
35*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('3 items', plural(3, 'item'))
36*61c4878aSAndroid Build Coastguard Worker
37*61c4878aSAndroid Build Coastguard Worker    def test_single_these(self):
38*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('this 1 item', plural(1, 'item', these=True))
39*61c4878aSAndroid Build Coastguard Worker
40*61c4878aSAndroid Build Coastguard Worker    def test_multiple_these(self):
41*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('these 3 items', plural(3, 'item', these=True))
42*61c4878aSAndroid Build Coastguard Worker
43*61c4878aSAndroid Build Coastguard Worker    def test_single_are(self):
44*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('1 item is', plural(1, 'item', are=True))
45*61c4878aSAndroid Build Coastguard Worker
46*61c4878aSAndroid Build Coastguard Worker    def test_multiple_are(self):
47*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('3 items are', plural(3, 'item', are=True))
48*61c4878aSAndroid Build Coastguard Worker
49*61c4878aSAndroid Build Coastguard Worker    def test_single_exist(self):
50*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('1 item exists', plural(1, 'item', exist=True))
51*61c4878aSAndroid Build Coastguard Worker
52*61c4878aSAndroid Build Coastguard Worker    def test_multiple_exist(self):
53*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('3 items exist', plural(3, 'item', exist=True))
54*61c4878aSAndroid Build Coastguard Worker
55*61c4878aSAndroid Build Coastguard Worker    def test_single_y(self):
56*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('1 thingy', plural(1, 'thingy'))
57*61c4878aSAndroid Build Coastguard Worker
58*61c4878aSAndroid Build Coastguard Worker    def test_multiple_y(self):
59*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('3 thingies', plural(3, 'thingy'))
60*61c4878aSAndroid Build Coastguard Worker
61*61c4878aSAndroid Build Coastguard Worker    def test_single_s(self):
62*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('1 bus', plural(1, 'bus'))
63*61c4878aSAndroid Build Coastguard Worker
64*61c4878aSAndroid Build Coastguard Worker    def test_multiple_s(self):
65*61c4878aSAndroid Build Coastguard Worker        self.assertEqual('3 buses', plural(3, 'bus'))
66*61c4878aSAndroid Build Coastguard Worker
67*61c4878aSAndroid Build Coastguard Worker    def test_format_hex(self):
68*61c4878aSAndroid Build Coastguard Worker        self.assertEqual(
69*61c4878aSAndroid Build Coastguard Worker            '14 items',
70*61c4878aSAndroid Build Coastguard Worker            plural(20, 'item', count_format='x'),
71*61c4878aSAndroid Build Coastguard Worker        )
72*61c4878aSAndroid Build Coastguard Worker
73*61c4878aSAndroid Build Coastguard Worker
74*61c4878aSAndroid Build Coastguard Workerif __name__ == '__main__':
75*61c4878aSAndroid Build Coastguard Worker    unittest.main()
76