1c92c883fdf2287b49392692fa2e8d109dc26f785David Faden/*
2c92c883fdf2287b49392692fa2e8d109dc26f785David Faden * Copyright (C) 2014 The Android Open Source Project
3c92c883fdf2287b49392692fa2e8d109dc26f785David Faden *
4c92c883fdf2287b49392692fa2e8d109dc26f785David Faden * Licensed under the Apache License, Version 2.0 (the "License");
5c92c883fdf2287b49392692fa2e8d109dc26f785David Faden * you may not use this file except in compliance with the License.
6c92c883fdf2287b49392692fa2e8d109dc26f785David Faden * You may obtain a copy of the License at
7c92c883fdf2287b49392692fa2e8d109dc26f785David Faden *
8c92c883fdf2287b49392692fa2e8d109dc26f785David Faden *      http://www.apache.org/licenses/LICENSE-2.0
9c92c883fdf2287b49392692fa2e8d109dc26f785David Faden *
10c92c883fdf2287b49392692fa2e8d109dc26f785David Faden * Unless required by applicable law or agreed to in writing, software
11c92c883fdf2287b49392692fa2e8d109dc26f785David Faden * distributed under the License is distributed on an "AS IS" BASIS,
12c92c883fdf2287b49392692fa2e8d109dc26f785David Faden * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c92c883fdf2287b49392692fa2e8d109dc26f785David Faden * See the License for the specific language governing permissions and
14c92c883fdf2287b49392692fa2e8d109dc26f785David Faden * limitations under the License.
15c92c883fdf2287b49392692fa2e8d109dc26f785David Faden */
16c92c883fdf2287b49392692fa2e8d109dc26f785David Faden
17c92c883fdf2287b49392692fa2e8d109dc26f785David Fadenpackage com.android.inputmethod.latin.utils;
18c92c883fdf2287b49392692fa2e8d109dc26f785David Faden
19c92c883fdf2287b49392692fa2e8d109dc26f785David Fadenimport android.test.AndroidTestCase;
20c92c883fdf2287b49392692fa2e8d109dc26f785David Fadenimport android.test.suitebuilder.annotation.SmallTest;
21c92c883fdf2287b49392692fa2e8d109dc26f785David Faden
225b91b551e5ffaf2c2e691dfbd434f21c82293986Jean Chalardimport com.android.inputmethod.latin.common.CollectionUtils;
235b91b551e5ffaf2c2e691dfbd434f21c82293986Jean Chalard
24c92c883fdf2287b49392692fa2e8d109dc26f785David Fadenimport java.util.ArrayList;
25c92c883fdf2287b49392692fa2e8d109dc26f785David Fadenimport java.util.Arrays;
26c92c883fdf2287b49392692fa2e8d109dc26f785David Fadenimport java.util.Collections;
2787eb7ac29c51ba4c341cb663cdbbc5ea74595f2dDan Zivkovicimport java.util.HashMap;
2887eb7ac29c51ba4c341cb663cdbbc5ea74595f2dDan Zivkovicimport java.util.List;
2987eb7ac29c51ba4c341cb663cdbbc5ea74595f2dDan Zivkovicimport java.util.Map;
30c92c883fdf2287b49392692fa2e8d109dc26f785David Faden
31c92c883fdf2287b49392692fa2e8d109dc26f785David Faden/**
32c92c883fdf2287b49392692fa2e8d109dc26f785David Faden * Tests for {@link CollectionUtils}.
33c92c883fdf2287b49392692fa2e8d109dc26f785David Faden */
34c92c883fdf2287b49392692fa2e8d109dc26f785David Faden@SmallTest
35c92c883fdf2287b49392692fa2e8d109dc26f785David Fadenpublic class CollectionUtilsTests extends AndroidTestCase {
36c92c883fdf2287b49392692fa2e8d109dc26f785David Faden    /**
37d443146c343fd880eb6178bae94edec0865bce62David Faden     * Tests that {@link CollectionUtils#arrayAsList(Object[],int,int)} fails as expected
38d443146c343fd880eb6178bae94edec0865bce62David Faden     * with some invalid inputs.
39d443146c343fd880eb6178bae94edec0865bce62David Faden     */
40d443146c343fd880eb6178bae94edec0865bce62David Faden    public void testArrayAsListFailure() {
41d443146c343fd880eb6178bae94edec0865bce62David Faden        final String[] array = { "0", "1" };
42d443146c343fd880eb6178bae94edec0865bce62David Faden        // Negative start
43d443146c343fd880eb6178bae94edec0865bce62David Faden        try {
44d443146c343fd880eb6178bae94edec0865bce62David Faden            CollectionUtils.arrayAsList(array, -1, 1);
45d443146c343fd880eb6178bae94edec0865bce62David Faden            fail("Failed to catch start < 0");
46d443146c343fd880eb6178bae94edec0865bce62David Faden        } catch (final IllegalArgumentException e) {
47d443146c343fd880eb6178bae94edec0865bce62David Faden            assertEquals("Invalid start: -1 end: 1 with array.length: 2", e.getMessage());
48d443146c343fd880eb6178bae94edec0865bce62David Faden        }
49d443146c343fd880eb6178bae94edec0865bce62David Faden        // start > end
50d443146c343fd880eb6178bae94edec0865bce62David Faden        try {
51d443146c343fd880eb6178bae94edec0865bce62David Faden            CollectionUtils.arrayAsList(array, 1, -1);
52d443146c343fd880eb6178bae94edec0865bce62David Faden            fail("Failed to catch start > end");
53d443146c343fd880eb6178bae94edec0865bce62David Faden        } catch (final IllegalArgumentException e) {
54d443146c343fd880eb6178bae94edec0865bce62David Faden            assertEquals("Invalid start: 1 end: -1 with array.length: 2", e.getMessage());
55d443146c343fd880eb6178bae94edec0865bce62David Faden        }
56d443146c343fd880eb6178bae94edec0865bce62David Faden        // end > array.length
57d443146c343fd880eb6178bae94edec0865bce62David Faden        try {
58d443146c343fd880eb6178bae94edec0865bce62David Faden            CollectionUtils.arrayAsList(array, 1, 3);
59d443146c343fd880eb6178bae94edec0865bce62David Faden            fail("Failed to catch end > array.length");
60d443146c343fd880eb6178bae94edec0865bce62David Faden        } catch (final IllegalArgumentException e) {
61d443146c343fd880eb6178bae94edec0865bce62David Faden            assertEquals("Invalid start: 1 end: 3 with array.length: 2", e.getMessage());
62d443146c343fd880eb6178bae94edec0865bce62David Faden        }
63d443146c343fd880eb6178bae94edec0865bce62David Faden    }
64d443146c343fd880eb6178bae94edec0865bce62David Faden
65d443146c343fd880eb6178bae94edec0865bce62David Faden    /**
66d3a4c5132422b189c8dbb94dbbe84a9b9761b0a8Tadashi G. Takaoka     * Tests that {@link CollectionUtils#arrayAsList(Object[],int,int)} gives the expected
67c92c883fdf2287b49392692fa2e8d109dc26f785David Faden     * results for a few valid inputs.
68c92c883fdf2287b49392692fa2e8d109dc26f785David Faden     */
69c92c883fdf2287b49392692fa2e8d109dc26f785David Faden    public void testArrayAsList() {
70c92c883fdf2287b49392692fa2e8d109dc26f785David Faden        final ArrayList<String> empty = new ArrayList<>();
71541ef56e057eb7d81eae6e294ce9eb364f825867Dan Zivkovic        assertEquals(empty, CollectionUtils.arrayAsList(new String[] {}, 0, 0));
72d443146c343fd880eb6178bae94edec0865bce62David Faden        final String[] array = { "0", "1", "2", "3", "4" };
73c92c883fdf2287b49392692fa2e8d109dc26f785David Faden        assertEquals(empty, CollectionUtils.arrayAsList(array, 0, 0));
74c92c883fdf2287b49392692fa2e8d109dc26f785David Faden        assertEquals(empty, CollectionUtils.arrayAsList(array, 1, 1));
75d443146c343fd880eb6178bae94edec0865bce62David Faden        assertEquals(empty, CollectionUtils.arrayAsList(array, array.length, array.length));
76c92c883fdf2287b49392692fa2e8d109dc26f785David Faden        final ArrayList<String> expected123 = new ArrayList<>(Arrays.asList("1", "2", "3"));
77c92c883fdf2287b49392692fa2e8d109dc26f785David Faden        assertEquals(expected123, CollectionUtils.arrayAsList(array, 1, 4));
78c92c883fdf2287b49392692fa2e8d109dc26f785David Faden    }
79c92c883fdf2287b49392692fa2e8d109dc26f785David Faden
80c92c883fdf2287b49392692fa2e8d109dc26f785David Faden    /**
81d3a4c5132422b189c8dbb94dbbe84a9b9761b0a8Tadashi G. Takaoka     * Tests that {@link CollectionUtils#isNullOrEmpty(java.util.Collection)} gives the expected
82c92c883fdf2287b49392692fa2e8d109dc26f785David Faden     * results for a few cases.
83c92c883fdf2287b49392692fa2e8d109dc26f785David Faden     */
84c92c883fdf2287b49392692fa2e8d109dc26f785David Faden    public void testIsNullOrEmpty() {
85541ef56e057eb7d81eae6e294ce9eb364f825867Dan Zivkovic        assertTrue(CollectionUtils.isNullOrEmpty((List<String>) null));
86541ef56e057eb7d81eae6e294ce9eb364f825867Dan Zivkovic        assertTrue(CollectionUtils.isNullOrEmpty((Map<String, String>) null));
87541ef56e057eb7d81eae6e294ce9eb364f825867Dan Zivkovic        assertTrue(CollectionUtils.isNullOrEmpty(new ArrayList<String>()));
88541ef56e057eb7d81eae6e294ce9eb364f825867Dan Zivkovic        assertTrue(CollectionUtils.isNullOrEmpty(new HashMap<String, String>()));
8987eb7ac29c51ba4c341cb663cdbbc5ea74595f2dDan Zivkovic        assertFalse(CollectionUtils.isNullOrEmpty(Collections.singletonList("Not empty")));
9087eb7ac29c51ba4c341cb663cdbbc5ea74595f2dDan Zivkovic        assertFalse(CollectionUtils.isNullOrEmpty(Collections.singletonMap("Not", "empty")));
91c92c883fdf2287b49392692fa2e8d109dc26f785David Faden    }
92c92c883fdf2287b49392692fa2e8d109dc26f785David Faden}
93