19b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka/* 29b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka * Copyright (C) 2010 The Android Open Source Project 39b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka * 4ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); 5ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * you may not use this file except in compliance with the License. 6ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * You may obtain a copy of the License at 79b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka * 8ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0 99b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka * 109b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software 11ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, 12ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * See the License for the specific language governing permissions and 14ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * limitations under the License. 159b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka */ 169b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka 1772934bd5967d0127f71fd4d66158b18b4e6ceefeTadashi G. Takaokapackage com.android.inputmethod.keyboard.internal; 189b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka 19d9c6b332090c90e4d4840e62fe3eb45c834b2e14Tadashi G. Takaokaimport static com.android.inputmethod.keyboard.internal.KeyboardIconsSet.ICON_UNDEFINED; 209342484e8d573a40f470b6a593df31c602fa4076Ken Wakasaimport static com.android.inputmethod.latin.common.Constants.CODE_UNSPECIFIED; 21d9c6b332090c90e4d4840e62fe3eb45c834b2e14Tadashi G. Takaoka 22b4598f7d05d6afd01ddc7ea0bed71dda837d1debTadashi G. Takaokaimport android.test.suitebuilder.annotation.SmallTest; 239b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka 249342484e8d573a40f470b6a593df31c602fa4076Ken Wakasaimport com.android.inputmethod.latin.common.Constants; 25c2a21786e526cc32e48a577a55b1b7e72ae1a6ddTadashi G. Takaoka 2615c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaokaimport java.util.Arrays; 27ed3bac91f242850c6d1833a5f8981b9cc208c5ddTadashi G. Takaokaimport java.util.Locale; 2815c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka 29b4598f7d05d6afd01ddc7ea0bed71dda837d1debTadashi G. Takaoka@SmallTest 302151216c09e9947bc78937c72492f4d4664a9389Tadashi G. Takaokapublic final class MoreKeySpecTests extends KeySpecParserTestsBase { 319b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka @Override 32853e8d8869e2b7bb63a41bee031c91e350cf9d14Tadashi G. Takaoka protected void assertParser(final String message, final String moreKeySpec, 33853e8d8869e2b7bb63a41bee031c91e350cf9d14Tadashi G. Takaoka final String expectedLabel, final String expectedOutputText, final int expectedIconId, 34e855093f5513e46f7f2da6d99e74873ac4f1eeefTadashi G. Takaoka final int expectedCode) { 350bae2ab460a257fa4911db91f5823b80d1a13c46Tadashi G. Takaoka final String labelResolved = mTextsSet.resolveTextReference(moreKeySpec); 367ae6721ffad1e79ee446de87d13f18a27619830bTadashi G. Takaoka final MoreKeySpec spec = new MoreKeySpec( 377ae6721ffad1e79ee446de87d13f18a27619830bTadashi G. Takaoka labelResolved, false /* needsToUpperCase */, Locale.US); 38cf41aff251ecc94b729307ede05208a104fcd8b0Tadashi G. Takaoka assertEquals(message + " [label]", expectedLabel, spec.mLabel); 39cf41aff251ecc94b729307ede05208a104fcd8b0Tadashi G. Takaoka assertEquals(message + " [ouptputText]", expectedOutputText, spec.mOutputText); 40cf41aff251ecc94b729307ede05208a104fcd8b0Tadashi G. Takaoka assertEquals(message + " [icon]", 41853e8d8869e2b7bb63a41bee031c91e350cf9d14Tadashi G. Takaoka KeyboardIconsSet.getIconName(expectedIconId), 42cf41aff251ecc94b729307ede05208a104fcd8b0Tadashi G. Takaoka KeyboardIconsSet.getIconName(spec.mIconId)); 43cf41aff251ecc94b729307ede05208a104fcd8b0Tadashi G. Takaoka assertEquals(message + " [code]", 44240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka Constants.printableCode(expectedCode), 45240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka Constants.printableCode(spec.mCode)); 469b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka } 479b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka 48d9c6b332090c90e4d4840e62fe3eb45c834b2e14Tadashi G. Takaoka // TODO: Move this method to {@link KeySpecParserBase}. 49d9c6b332090c90e4d4840e62fe3eb45c834b2e14Tadashi G. Takaoka public void testEmptySpec() { 50d9c6b332090c90e4d4840e62fe3eb45c834b2e14Tadashi G. Takaoka assertParserError("Null spec", null, 51d9c6b332090c90e4d4840e62fe3eb45c834b2e14Tadashi G. Takaoka null, null, ICON_UNDEFINED, CODE_UNSPECIFIED); 52d9c6b332090c90e4d4840e62fe3eb45c834b2e14Tadashi G. Takaoka assertParserError("Empty spec", "", 53d9c6b332090c90e4d4840e62fe3eb45c834b2e14Tadashi G. Takaoka null, null, ICON_UNDEFINED, CODE_UNSPECIFIED); 54d9c6b332090c90e4d4840e62fe3eb45c834b2e14Tadashi G. Takaoka } 55d9c6b332090c90e4d4840e62fe3eb45c834b2e14Tadashi G. Takaoka 56e855093f5513e46f7f2da6d99e74873ac4f1eeefTadashi G. Takaoka private static void assertArrayEquals(final String message, final Object[] expected, 57e855093f5513e46f7f2da6d99e74873ac4f1eeefTadashi G. Takaoka final Object[] actual) { 582f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka if (expected == actual) { 5915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka return; 6015c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka } 6115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka if (expected == null || actual == null) { 6215c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka assertEquals(message, Arrays.toString(expected), Arrays.toString(actual)); 632f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka return; 642f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka } 652f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka if (expected.length != actual.length) { 662f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertEquals(message + " [length]", Arrays.toString(expected), Arrays.toString(actual)); 672f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka return; 6815c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka } 692f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka for (int i = 0; i < expected.length; i++) { 702f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertEquals(message + " [" + i + "]", 712f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka Arrays.toString(expected), Arrays.toString(actual)); 722f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka } 732f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka } 742f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka 75e855093f5513e46f7f2da6d99e74873ac4f1eeefTadashi G. Takaoka private static void assertInsertAdditionalMoreKeys(final String message, 76e855093f5513e46f7f2da6d99e74873ac4f1eeefTadashi G. Takaoka final String[] moreKeys, final String[] additionalMoreKeys, final String[] expected) { 77e855093f5513e46f7f2da6d99e74873ac4f1eeefTadashi G. Takaoka final String[] actual = MoreKeySpec.insertAdditionalMoreKeys(moreKeys, additionalMoreKeys); 782f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertArrayEquals(message, expected, actual); 7915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka } 8015c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka 815f00fe09e9a611b647592188316e5999465df4d3Tadashi G. Takaoka @SuppressWarnings("static-method") 82aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka public void testEmptyEntry() { 832f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("null more keys and null additons", 84aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka null, 85aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka null, 86aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka null); 872f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("null more keys and empty additons", 88aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka null, 89aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka new String[0], 90aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka null); 912f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("empty more keys and null additons", 92aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka new String[0], 93aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka null, 94aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka null); 952f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("empty more keys and empty additons", 96aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka new String[0], 97aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka new String[0], 98aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka null); 99aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka 1002f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("filter out empty more keys", 101aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka new String[] { null, "a", "", "b", null }, 102aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka null, 103aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka new String[] { "a", "b" }); 1042f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("filter out empty additons", 105aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka new String[] { "a", "%", "b", "%", "c", "%", "d" }, 106aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka new String[] { null, "A", "", "B", null }, 107aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka new String[] { "a", "A", "b", "B", "c", "d" }); 108aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka } 109aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka 1105f00fe09e9a611b647592188316e5999465df4d3Tadashi G. Takaoka @SuppressWarnings("static-method") 11115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka public void testInsertAdditionalMoreKeys() { 11215c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka // Escaped marker. 1132f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("escaped marker", 11415c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "\\%", "%-)" }, 11515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2" }, 11615c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2", "\\%", "%-)" }); 11715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka 11815c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka // 0 more key. 1192f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("null & null", null, null, null); 1202f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("null & 1 additon", 12115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka null, 12215c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1" }, 12315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1" }); 1242f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("null & 2 additons", 12515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka null, 12615c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2" }, 12715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2" }); 12815c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka 12915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka // 0 additional more key. 1302f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("1 more key & null", 13115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A" }, 13215c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka null, 13315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A" }); 1342f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & null", 13515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "B" }, 13615c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka null, 13715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "B" }); 13815c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka 13915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka // No marker. 1402f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("1 more key & 1 addtional & no marker", 14115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A" }, 14215c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1" }, 14315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "A" }); 1442f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("1 more key & 2 addtionals & no marker", 14515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A" }, 14615c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2" }, 14715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2", "A" }); 1482f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & 1 addtional & no marker", 14915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "B" }, 15015c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1" }, 15115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "A", "B" }); 1522f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & 2 addtionals & no marker", 15315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "B" }, 15415c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2" }, 15515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2", "A", "B" }); 15615c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka 15715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka // 1 marker. 1582f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("1 more key & 1 additon & marker at head", 15915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%", "A" }, 16015c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1" }, 16115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "A" }); 1622f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("1 more key & 1 additon & marker at tail", 16315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "%" }, 16415c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1" }, 16515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "1" }); 1662f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & 1 additon & marker at middle", 16715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "%", "B" }, 16815c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1" }, 16915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "1", "B" }); 17015c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka 17115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka // 1 marker & excess additional more keys. 1722f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("1 more key & 2 additons & marker at head", 17315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%", "A", "B" }, 17415c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2" }, 17515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "A", "B", "2" }); 1762f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("1 more key & 2 additons & marker at tail", 17715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "B", "%" }, 17815c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2" }, 17915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "B", "1", "2" }); 1802f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & 2 additons & marker at middle", 18115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "%", "B" }, 18215c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2" }, 18315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "1", "B", "2" }); 18415c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka 18515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka // 2 markers. 1862f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("0 more key & 2 addtional & 2 markers", 18715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%", "%" }, 18815c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2" }, 18915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2" }); 1902f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("1 more key & 2 addtional & 2 markers at head", 19115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%", "%", "A" }, 19215c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2" }, 19315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2", "A" }); 1942f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("1 more key & 2 addtional & 2 markers at tail", 19515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "%", "%" }, 19615c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2" }, 19715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "1", "2" }); 1982f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & 2 addtional & 2 markers at middle", 19915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "%", "%", "B" }, 20015c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2" }, 20115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "1", "2", "B" }); 2022f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & 2 addtional & 2 markers at head & middle", 20315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%", "A", "%", "B" }, 20415c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2" }, 20515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "A", "2", "B" }); 2062f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & 2 addtional & 2 markers at head & tail", 20715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%", "A", "B", "%" }, 20815c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2" }, 20915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "A", "B", "2" }); 2102f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & 2 addtional & 2 markers at middle & tail", 21115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "%", "B", "%" }, 21215c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2" }, 21315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "1", "B", "2" }); 21415c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka 215aeeed758480b0fac848f4556884d978f3004555bTadashi G. Takaoka // 2 markers & excess additional more keys. 2162f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("0 more key & 2 additons & 2 markers", 21715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%", "%" }, 21815c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2", "3" }, 21915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2", "3" }); 2202f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("1 more key & 2 additons & 2 markers at head", 22115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%", "%", "A" }, 22215c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2", "3" }, 22315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2", "A", "3" }); 2242f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("1 more key & 2 additons & 2 markers at tail", 22515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "%", "%" }, 22615c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2", "3" }, 22715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "1", "2", "3" }); 2282f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & 2 additons & 2 markers at middle", 22915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "%", "%", "B" }, 23015c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2", "3" }, 23115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "1", "2", "B", "3" }); 2322f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & 2 additons & 2 markers at head & middle", 23315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%", "A", "%", "B" }, 23415c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2", "3" }, 23515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "A", "2", "B", "3" }); 2362f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & 2 additons & 2 markers at head & tail", 23715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%", "A", "B", "%" }, 23815c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2", "3" }, 23915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "A", "B", "2", "3" }); 2402f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & 2 additons & 2 markers at middle & tail", 24115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "%", "B", "%" }, 24215c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2", "3" }, 24315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "1", "B", "2", "3" }); 24415c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka 24515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka // 0 addtional more key and excess markers. 2462f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("0 more key & null & excess marker", 24715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%" }, 24815c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka null, 24915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka null); 2502f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("1 more key & null & excess marker at head", 25115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%", "A" }, 25215c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka null, 25315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A" }); 2542f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("1 more key & null & excess marker at tail", 25515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "%" }, 25615c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka null, 25715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A" }); 2582f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & null & excess marker at middle", 25915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "%", "B" }, 26015c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka null, 26115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "B" }); 2622f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & null & excess markers", 26315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%", "A", "%", "B", "%" }, 26415c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka null, 26515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "B" }); 26615c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka 26715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka // Excess markers. 2682f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("0 more key & 1 additon & excess marker", 26915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%", "%" }, 27015c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1" }, 27115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1" }); 2722f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("1 more key & 1 additon & excess marker at head", 27315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%", "%", "A" }, 27415c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1" }, 27515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "A" }); 2762f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("1 more key & 1 additon & excess marker at tail", 27715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "%", "%" }, 27815c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1" }, 27915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "1" }); 2802f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & 1 additon & excess marker at middle", 28115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "%", "%", "B" }, 28215c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1" }, 28315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "A", "1", "B" }); 2842f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & 1 additon & excess markers", 28515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%", "A", "%", "B", "%" }, 28615c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1" }, 28715c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "A", "B" }); 2882f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & 2 additons & excess markers", 28915c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%", "A", "%", "B", "%" }, 29015c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2" }, 29115c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "A", "2", "B" }); 2922f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertInsertAdditionalMoreKeys("2 more keys & 3 additons & excess markers", 29315c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "%", "A", "%", "%", "B", "%" }, 29415c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "2", "3" }, 29515c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka new String[] { "1", "A", "2", "3", "B" }); 29615c99e9f1a7776b95325d36cf9e38b6d674e483bTadashi G. Takaoka } 2972f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka 2982f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka private static final String HAS_LABEL = "!hasLabel!"; 2992f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka private static final String NEEDS_DIVIDER = "!needsDividers!"; 3002f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka private static final String AUTO_COLUMN_ORDER = "!autoColumnOrder!"; 3012f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka private static final String FIXED_COLUMN_ORDER = "!fixedColumnOrder!"; 3022f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka 303e855093f5513e46f7f2da6d99e74873ac4f1eeefTadashi G. Takaoka private static void assertGetBooleanValue(final String message, final String key, 304e855093f5513e46f7f2da6d99e74873ac4f1eeefTadashi G. Takaoka final String[] moreKeys, final String[] expected, final boolean expectedValue) { 3052f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka final String[] actual = Arrays.copyOf(moreKeys, moreKeys.length); 306e855093f5513e46f7f2da6d99e74873ac4f1eeefTadashi G. Takaoka final boolean actualValue = MoreKeySpec.getBooleanValue(actual, key); 3072f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertEquals(message + " [value]", expectedValue, actualValue); 3082f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertArrayEquals(message, expected, actual); 3092f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka } 3102f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka 3115f00fe09e9a611b647592188316e5999465df4d3Tadashi G. Takaoka @SuppressWarnings("static-method") 3122f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka public void testGetBooleanValue() { 3132f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertGetBooleanValue("Has label", HAS_LABEL, 3142f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { HAS_LABEL, "a", "b", "c" }, 3152f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { null, "a", "b", "c" }, true); 3160a3362d26474cbd60bf870be7ad1413359e4fad6Tadashi G. Takaoka // Upper case specification will not work. 3172f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertGetBooleanValue("HAS LABEL", HAS_LABEL, 31894027c7201a376107a35ec78cd21db1905662601Tadashi G. Takaoka new String[] { HAS_LABEL.toUpperCase(Locale.ROOT), "a", "b", "c" }, 3190a3362d26474cbd60bf870be7ad1413359e4fad6Tadashi G. Takaoka new String[] { "!HASLABEL!", "a", "b", "c" }, false); 3202f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka 3212f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertGetBooleanValue("No has label", HAS_LABEL, 3222f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { "a", "b", "c" }, 3232f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { "a", "b", "c" }, false); 3242f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertGetBooleanValue("No has label with fixed clumn order", HAS_LABEL, 3252f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { FIXED_COLUMN_ORDER + "3", "a", "b", "c" }, 3262f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { FIXED_COLUMN_ORDER + "3", "a", "b", "c" }, false); 3272f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka 3280a3362d26474cbd60bf870be7ad1413359e4fad6Tadashi G. Takaoka // Upper case specification will not work. 3292f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertGetBooleanValue("Multiple has label", HAS_LABEL, 3302f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { 33194027c7201a376107a35ec78cd21db1905662601Tadashi G. Takaoka "a", HAS_LABEL.toUpperCase(Locale.ROOT), "b", "c", HAS_LABEL, "d" }, 3322f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { 3330a3362d26474cbd60bf870be7ad1413359e4fad6Tadashi G. Takaoka "a", "!HASLABEL!", "b", "c", null, "d" }, true); 3340a3362d26474cbd60bf870be7ad1413359e4fad6Tadashi G. Takaoka // Upper case specification will not work. 3352f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertGetBooleanValue("Multiple has label with needs dividers", HAS_LABEL, 3362f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { 33794027c7201a376107a35ec78cd21db1905662601Tadashi G. Takaoka "a", HAS_LABEL, "b", NEEDS_DIVIDER, HAS_LABEL.toUpperCase(Locale.ROOT), "d" }, 3382f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { 3390a3362d26474cbd60bf870be7ad1413359e4fad6Tadashi G. Takaoka "a", null, "b", NEEDS_DIVIDER, "!HASLABEL!", "d" }, true); 3402f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka } 3412f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka 342e855093f5513e46f7f2da6d99e74873ac4f1eeefTadashi G. Takaoka private static void assertGetIntValue(final String message, final String key, 343e855093f5513e46f7f2da6d99e74873ac4f1eeefTadashi G. Takaoka final int defaultValue, final String[] moreKeys, final String[] expected, 344e855093f5513e46f7f2da6d99e74873ac4f1eeefTadashi G. Takaoka final int expectedValue) { 3452f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka final String[] actual = Arrays.copyOf(moreKeys, moreKeys.length); 346e855093f5513e46f7f2da6d99e74873ac4f1eeefTadashi G. Takaoka final int actualValue = MoreKeySpec.getIntValue(actual, key, defaultValue); 3472f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertEquals(message + " [value]", expectedValue, actualValue); 3482f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertArrayEquals(message, expected, actual); 3492f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka } 3502f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka 3515f00fe09e9a611b647592188316e5999465df4d3Tadashi G. Takaoka @SuppressWarnings("static-method") 3522f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka public void testGetIntValue() { 3532f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertGetIntValue("Fixed column order 3", FIXED_COLUMN_ORDER, -1, 3542f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { FIXED_COLUMN_ORDER + "3", "a", "b", "c" }, 3552f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { null, "a", "b", "c" }, 3); 3560a3362d26474cbd60bf870be7ad1413359e4fad6Tadashi G. Takaoka // Upper case specification will not work. 3572f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertGetIntValue("FIXED COLUMN ORDER 3", FIXED_COLUMN_ORDER, -1, 35894027c7201a376107a35ec78cd21db1905662601Tadashi G. Takaoka new String[] { FIXED_COLUMN_ORDER.toUpperCase(Locale.ROOT) + "3", "a", "b", "c" }, 3590a3362d26474cbd60bf870be7ad1413359e4fad6Tadashi G. Takaoka new String[] { "!FIXEDCOLUMNORDER!3", "a", "b", "c" }, -1); 3602f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka 3612f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertGetIntValue("No fixed column order", FIXED_COLUMN_ORDER, -1, 3622f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { "a", "b", "c" }, 3632f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { "a", "b", "c" }, -1); 3642f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertGetIntValue("No fixed column order with auto column order", FIXED_COLUMN_ORDER, -1, 3652f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { AUTO_COLUMN_ORDER + "5", "a", "b", "c" }, 3662f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { AUTO_COLUMN_ORDER + "5", "a", "b", "c" }, -1); 3672f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka 3682f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertGetIntValue("Multiple fixed column order 3,5", FIXED_COLUMN_ORDER, -1, 3692f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { FIXED_COLUMN_ORDER + "3", "a", FIXED_COLUMN_ORDER + "5", "b" }, 3702f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { null, "a", null, "b" }, 3); 3710a3362d26474cbd60bf870be7ad1413359e4fad6Tadashi G. Takaoka // Upper case specification will not work. 3722f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka assertGetIntValue("Multiple fixed column order 5,3 with has label", FIXED_COLUMN_ORDER, -1, 3732f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka new String[] { 37494027c7201a376107a35ec78cd21db1905662601Tadashi G. Takaoka FIXED_COLUMN_ORDER.toUpperCase(Locale.ROOT) + "5", HAS_LABEL, "a", 3752f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka FIXED_COLUMN_ORDER + "3", "b" }, 3760a3362d26474cbd60bf870be7ad1413359e4fad6Tadashi G. Takaoka new String[] { "!FIXEDCOLUMNORDER!5", HAS_LABEL, "a", null, "b" }, 3); 3772f16fd40faab7287dfcae4899050b9df360d0c29Tadashi G. Takaoka } 3789b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka} 379