1c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer/* 2c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. 3c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 5c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * This code is free software; you can redistribute it and/or modify it 6c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * under the terms of the GNU General Public License version 2 only, as 7c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * published by the Free Software Foundation. 8c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 9c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * This code is distributed in the hope that it will be useful, but WITHOUT 10c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * version 2 for more details (a copy is included in the LICENSE file that 13c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * accompanied this code). 14c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 15c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * You should have received a copy of the GNU General Public License version 16c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 2 along with this work; if not, write to the Free Software Foundation, 17c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 19c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * or visit www.oracle.com if you need additional information or have any 21c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * questions. 22c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */ 23c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 24c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer/* 25c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * This file is available under and governed by the GNU General Public 26c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * License version 2 only, as published by the Free Software Foundation. 27c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * However, the following notice accompanied the original version of this 28c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * file: 29c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 30c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Copyright (c) 2008-2012, Stephen Colebourne & Michael Nascimento Santos 31c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 32c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * All rights reserved. 33c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 34c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Redistribution and use in source and binary forms, with or without 35c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * modification, are permitted provided that the following conditions are met: 36c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 37c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * * Redistributions of source code must retain the above copyright notice, 38c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * this list of conditions and the following disclaimer. 39c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 40c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * * Redistributions in binary form must reproduce the above copyright notice, 41c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * this list of conditions and the following disclaimer in the documentation 42c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * and/or other materials provided with the distribution. 43c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 44c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * * Neither the name of JSR-310 nor the names of its contributors 45c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * may be used to endorse or promote products derived from this software 46c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * without specific prior written permission. 47c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 48c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 49c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 50c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 51c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 52c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 53c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 54c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 55c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 56c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 57c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 58c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 59c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */ 60c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerpackage test.java.time.format; 61c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 62c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoField.NANO_OF_SECOND; 63c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoField.SECOND_OF_MINUTE; 64c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static org.testng.Assert.assertEquals; 65c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static org.testng.Assert.fail; 66c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 67c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.text.ParsePosition; 68c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.DateTimeException; 69c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.LocalTime; 70c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.format.DateTimeFormatter; 71c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.TemporalAccessor; 72c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.TemporalField; 73c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 74c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport org.testng.annotations.DataProvider; 75c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport org.testng.annotations.Test; 76c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport test.java.time.temporal.MockFieldValue; 77c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 78c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer/** 79c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Test FractionPrinterParser. 80c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */ 81c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer@Test 82c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerpublic class TestFractionPrinterParser extends AbstractTestPrinterParser { 83c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 84c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer private DateTimeFormatter getFormatter(TemporalField field, int minWidth, int maxWidth, boolean decimalPoint) { 85c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer return builder.appendFraction(field, minWidth, maxWidth, decimalPoint).toFormatter(locale).withDecimalStyle(decimalStyle); 86c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 87c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 88c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer //----------------------------------------------------------------------- 89c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer // print 90c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer //----------------------------------------------------------------------- 91c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @Test(expectedExceptions=DateTimeException.class) 92c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_print_emptyCalendrical() throws Exception { 93c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer getFormatter(NANO_OF_SECOND, 0, 9, true).formatTo(EMPTY_DTA, buf); 94c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 95c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 96c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_print_append() throws Exception { 97c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer buf.append("EXISTING"); 98c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer getFormatter(NANO_OF_SECOND, 0, 9, true).formatTo(LocalTime.of(12, 30, 40, 3), buf); 99c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(buf.toString(), "EXISTING.000000003"); 100c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 101c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 102c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer //----------------------------------------------------------------------- 103c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @DataProvider(name="Nanos") 104c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer Object[][] provider_nanos() { 105c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer return new Object[][] { 106c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 0, ""}, 107c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 2, ".000000002"}, 108c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 20, ".00000002"}, 109c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 200, ".0000002"}, 110c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 2000, ".000002"}, 111c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 20000, ".00002"}, 112c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 200000, ".0002"}, 113c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 2000000, ".002"}, 114c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 20000000, ".02"}, 115c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 200000000, ".2"}, 116c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 1, ".000000001"}, 117c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 12, ".000000012"}, 118c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 123, ".000000123"}, 119c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 1234, ".000001234"}, 120c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 12345, ".000012345"}, 121c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 123456, ".000123456"}, 122c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 1234567, ".001234567"}, 123c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 12345678, ".012345678"}, 124c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 123456789, ".123456789"}, 125c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 126c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {1, 9, 0, ".0"}, 127c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {1, 9, 2, ".000000002"}, 128c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {1, 9, 20, ".00000002"}, 129c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {1, 9, 200, ".0000002"}, 130c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {1, 9, 2000, ".000002"}, 131c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {1, 9, 20000, ".00002"}, 132c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {1, 9, 200000, ".0002"}, 133c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {1, 9, 2000000, ".002"}, 134c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {1, 9, 20000000, ".02"}, 135c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {1, 9, 200000000, ".2"}, 136c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 137c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 0, ".00"}, 138c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 2, ".000"}, 139c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 20, ".000"}, 140c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 200, ".000"}, 141c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 2000, ".000"}, 142c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 20000, ".000"}, 143c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 200000, ".000"}, 144c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 2000000, ".002"}, 145c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 20000000, ".02"}, 146c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 200000000, ".20"}, 147c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 1, ".000"}, 148c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 12, ".000"}, 149c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 123, ".000"}, 150c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 1234, ".000"}, 151c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 12345, ".000"}, 152c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 123456, ".000"}, 153c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 1234567, ".001"}, 154c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 12345678, ".012"}, 155c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 3, 123456789, ".123"}, 156c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 157c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 0, ".000000"}, 158c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 2, ".000000"}, 159c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 20, ".000000"}, 160c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 200, ".000000"}, 161c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 2000, ".000002"}, 162c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 20000, ".000020"}, 163c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 200000, ".000200"}, 164c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 2000000, ".002000"}, 165c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 20000000, ".020000"}, 166c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 200000000, ".200000"}, 167c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 1, ".000000"}, 168c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 12, ".000000"}, 169c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 123, ".000000"}, 170c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 1234, ".000001"}, 171c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 12345, ".000012"}, 172c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 123456, ".000123"}, 173c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 1234567, ".001234"}, 174c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 12345678, ".012345"}, 175c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {6, 6, 123456789, ".123456"}, 176c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer }; 177c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 178c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 179c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @Test(dataProvider="Nanos") 180c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_print_nanos(int minWidth, int maxWidth, int value, String result) throws Exception { 181c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer getFormatter(NANO_OF_SECOND, minWidth, maxWidth, true).formatTo(new MockFieldValue(NANO_OF_SECOND, value), buf); 182c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer if (result == null) { 183c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer fail("Expected exception"); 184c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 185c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(buf.toString(), result); 186c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 187c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 188c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @Test(dataProvider="Nanos") 189c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_print_nanos_noDecimalPoint(int minWidth, int maxWidth, int value, String result) throws Exception { 190c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer getFormatter(NANO_OF_SECOND, minWidth, maxWidth, false).formatTo(new MockFieldValue(NANO_OF_SECOND, value), buf); 191c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer if (result == null) { 192c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer fail("Expected exception"); 193c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 194c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(buf.toString(), (result.startsWith(".") ? result.substring(1) : result)); 195c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 196c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 197c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer //----------------------------------------------------------------------- 198c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @DataProvider(name="Seconds") 199c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer Object[][] provider_seconds() { 200c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer return new Object[][] { 201c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 0, ""}, 202c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 3, ".05"}, 203c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 6, ".1"}, 204c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 9, ".15"}, 205c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 12, ".2"}, 206c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 15, ".25"}, 207c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 30, ".5"}, 208c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {0, 9, 45, ".75"}, 209c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 210c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 2, 0, ".00"}, 211c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 2, 3, ".05"}, 212c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 2, 6, ".10"}, 213c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 2, 9, ".15"}, 214c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 2, 12, ".20"}, 215c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 2, 15, ".25"}, 216c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 2, 30, ".50"}, 217c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {2, 2, 45, ".75"}, 218c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer }; 219c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 220c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 221c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @Test(dataProvider="Seconds") 222c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_print_seconds(int minWidth, int maxWidth, int value, String result) throws Exception { 223c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer getFormatter(SECOND_OF_MINUTE, minWidth, maxWidth, true).formatTo(new MockFieldValue(SECOND_OF_MINUTE, value), buf); 224c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer if (result == null) { 225c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer fail("Expected exception"); 226c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 227c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(buf.toString(), result); 228c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 229c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 230c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @Test(dataProvider="Seconds") 231c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_print_seconds_noDecimalPoint(int minWidth, int maxWidth, int value, String result) throws Exception { 232c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer getFormatter(SECOND_OF_MINUTE, minWidth, maxWidth, false).formatTo(new MockFieldValue(SECOND_OF_MINUTE, value), buf); 233c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer if (result == null) { 234c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer fail("Expected exception"); 235c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 236c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(buf.toString(), (result.startsWith(".") ? result.substring(1) : result)); 237c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 238c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 239c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer //----------------------------------------------------------------------- 240c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer // parse 241c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer //----------------------------------------------------------------------- 242c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @Test(dataProvider="Nanos") 243c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_reverseParse(int minWidth, int maxWidth, int value, String result) throws Exception { 244c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ParsePosition pos = new ParsePosition(0); 245c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer int expectedValue = fixParsedValue(maxWidth, value); 246c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer TemporalAccessor parsed = getFormatter(NANO_OF_SECOND, minWidth, maxWidth, true).parseUnresolved(result, pos); 247c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(pos.getIndex(), result.length()); 248c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertParsed(parsed, NANO_OF_SECOND, value == 0 && minWidth == 0 ? null : (long) expectedValue); 249c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 250c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 251c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @Test(dataProvider="Nanos") 252c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_reverseParse_noDecimalPoint(int minWidth, int maxWidth, int value, String result) throws Exception { 253c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ParsePosition pos = new ParsePosition((result.startsWith(".") ? 1 : 0)); 254c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer TemporalAccessor parsed = getFormatter(NANO_OF_SECOND, minWidth, maxWidth, false).parseUnresolved(result, pos); 255c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(pos.getIndex(), result.length()); 256c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer int expectedValue = fixParsedValue(maxWidth, value); 257c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertParsed(parsed, NANO_OF_SECOND, value == 0 && minWidth == 0 ? null : (long) expectedValue); 258c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 259c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 260c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @Test(dataProvider="Nanos") 261c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_reverseParse_followedByNonDigit(int minWidth, int maxWidth, int value, String result) throws Exception { 262c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ParsePosition pos = new ParsePosition(0); 263c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer int expectedValue = fixParsedValue(maxWidth, value); 264c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer TemporalAccessor parsed = getFormatter(NANO_OF_SECOND, minWidth, maxWidth, true).parseUnresolved(result + " ", pos); 265c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(pos.getIndex(), result.length()); 266c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertParsed(parsed, NANO_OF_SECOND, value == 0 && minWidth == 0 ? null : (long) expectedValue); 267c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 268c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 269c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer// @Test(dataProvider="Nanos") 270c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer// public void test_reverseParse_followedByNonDigit_noDecimalPoint(int minWidth, int maxWidth, int value, String result) throws Exception { 271c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer// FractionPrinterParser pp = new FractionPrinterParser(NANO_OF_SECOND, minWidth, maxWidth, false); 272c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer// int newPos = pp.parse(parseContext, result + " ", (result.startsWith(".") ? 1 : 0)); 273c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer// assertEquals(newPos, result.length()); 274c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer// int expectedValue = fixParsedValue(maxWidth, value); 275c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer// assertParsed(parseContext, NANO_OF_SECOND, value == 0 && minWidth == 0 ? null : (long) expectedValue); 276c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer// } 277c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 278c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @Test(dataProvider="Nanos") 279c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_reverseParse_preceededByNonDigit(int minWidth, int maxWidth, int value, String result) throws Exception { 280c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ParsePosition pos = new ParsePosition(1); 281c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer int expectedValue = fixParsedValue(maxWidth, value); 282c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer TemporalAccessor parsed = getFormatter(NANO_OF_SECOND, minWidth, maxWidth, true).parseUnresolved(" " + result, pos); 283c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(pos.getIndex(), result.length() + 1); 284c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertParsed(parsed, NANO_OF_SECOND, value == 0 && minWidth == 0 ? null : (long) expectedValue); 285c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 286c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 287c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer private int fixParsedValue(int maxWidth, int value) { 288c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer if (maxWidth < 9) { 289c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer int power = (int) Math.pow(10, (9 - maxWidth)); 290c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer value = (value / power) * power; 291c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 292c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer return value; 293c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 294c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 295c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @Test(dataProvider="Seconds") 296c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_reverseParse_seconds(int minWidth, int maxWidth, int value, String result) throws Exception { 297c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ParsePosition pos = new ParsePosition(0); 298c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer TemporalAccessor parsed = getFormatter(SECOND_OF_MINUTE, minWidth, maxWidth, true).parseUnresolved(result, pos); 299c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(pos.getIndex(), result.length()); 300c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertParsed(parsed, SECOND_OF_MINUTE, value == 0 && minWidth == 0 ? null : (long) value); 301c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 302c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 303c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer private void assertParsed(TemporalAccessor parsed, TemporalField field, Long value) { 304c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer if (value == null) { 305c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(parsed.isSupported(field), false); 306c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } else { 307c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(parsed.isSupported(field), true); 308c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(parsed.getLong(field), (long) value); 309c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 310c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 311c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 312c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer //----------------------------------------------------------------------- 313c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @DataProvider(name="ParseNothing") 314c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer Object[][] provider_parseNothing() { 315c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer return new Object[][] { 316c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {NANO_OF_SECOND, 3, 6, true, "", 0, 0}, 317c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {NANO_OF_SECOND, 3, 6, true, "A", 0, 0}, 318c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {NANO_OF_SECOND, 3, 6, true, ".", 0, 1}, 319c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {NANO_OF_SECOND, 3, 6, true, ".5", 0, 1}, 320c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {NANO_OF_SECOND, 3, 6, true, ".51", 0, 1}, 321c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {NANO_OF_SECOND, 3, 6, true, ".A23456", 0, 1}, 322c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer {NANO_OF_SECOND, 3, 6, true, ".1A3456", 0, 1}, 323c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer }; 324c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 325c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 326c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @Test(dataProvider = "ParseNothing") 327c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_parse_nothing(TemporalField field, int min, int max, boolean decimalPoint, String text, int pos, int expected) { 328c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ParsePosition ppos = new ParsePosition(pos); 329c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer TemporalAccessor parsed = getFormatter(field, min, max, decimalPoint).parseUnresolved(text, ppos); 330c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(ppos.getErrorIndex(), expected); 331c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(parsed, null); 332c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 333c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 334c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer //----------------------------------------------------------------------- 335c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_toString() throws Exception { 336c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(getFormatter(NANO_OF_SECOND, 3, 6, true).toString(), "Fraction(NanoOfSecond,3,6,DecimalPoint)"); 337c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 338c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 339c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_toString_noDecimalPoint() throws Exception { 340c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(getFormatter(NANO_OF_SECOND, 3, 6, false).toString(), "Fraction(NanoOfSecond,3,6)"); 341c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 342c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 343c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer} 344