From 77fbe3782fbca6b7cc0af5a381207c32d34d9bd5 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Sun, 31 Jul 2016 09:29:41 +0200 Subject: [PATCH 1/3] fix the patterns used by touch and date selectors https://bz.apache.org/bugzilla/show_bug.cgi?id=59909 --- WHATSNEW | 9 +++++ manual/Tasks/touch.html | 6 ++-- manual/Types/resources.html | 5 +-- manual/Types/selectors.html | 9 ++--- .../org/apache/tools/ant/taskdefs/Touch.java | 34 +++++++++++-------- .../ant/types/resources/selectors/Date.java | 13 ++++--- .../ant/types/selectors/BaseSelector.java | 17 ++++++++-- .../ant/types/selectors/DateSelector.java | 14 ++++---- .../ant/types/selectors/DateSelectorTest.java | 2 +- 9 files changed, 69 insertions(+), 40 deletions(-) diff --git a/WHATSNEW b/WHATSNEW index 9a36711f5..50128b852 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -40,6 +40,15 @@ Fixed bugs: worked on OSes where sed is GNU sed. Bugzilla Report 59898 + * 's default pattern as well as the default patterns used by + the (resource) selectors depended on the JDK being used - or + rather the locale provider being used and the default locale + provider changed with Java 9. + They are now fixed and the documentation has been updated to + reflect the real patterns used rather than a non-formal description + of the expected format. + Bugzilla Report 59909 + Other changes: -------------- diff --git a/manual/Tasks/touch.html b/manual/Tasks/touch.html index 263ea7075..8adee3805 100644 --- a/manual/Tasks/touch.html +++ b/manual/Tasks/touch.html @@ -74,8 +74,10 @@ resource collections (which also includes directories). Prior to Apache Ant pattern - SimpleDateFormat-compatible pattern string. - Defaults to MM/DD/YYYY HH:MM AM_or_PM or MM/DD/YYYY HH:MM:SS AM_or_PM. + SimpleDateFormat-compatible pattern string using + the current locale. + Defaults to "MM/dd/YYYY hh:mm a" or "MM/dd/yyyy hh:mm:ss a" + using the US locale. Since Ant 1.6.3 No diff --git a/manual/Types/resources.html b/manual/Types/resources.html index 58cefde1a..8ba77aa12 100644 --- a/manual/Types/resources.html +++ b/manual/Types/resources.html @@ -641,9 +641,10 @@ platforms. pattern SimpleDateFormat-compatible pattern - for use with the datetime attribute + for use with the datetime attribute using the + current locale - No, default is "MM/DD/YYYY HH:MM AM_or_PM" + No, default is "MM/dd/yyyy hh:mm a" using the US locale granularity diff --git a/manual/Types/selectors.html b/manual/Types/selectors.html index 560b416c7..402c711f5 100644 --- a/manual/Types/selectors.html +++ b/manual/Types/selectors.html @@ -173,9 +173,9 @@ datetime Specifies the date and time to test for. - Should be in the format MM/DD/YYYY HH:MM AM_or_PM, or - an alternative pattern specified via the pattern - attribute. + Should be in the format "MM/dd/yyyy hh:mm a" using the US + locale, or an alternative pattern specified via + the pattern attribute. At least one of the two. @@ -212,7 +212,8 @@ pattern The SimpleDateFormat-compatible pattern - to use when interpreting the datetime attribute. + to use when interpreting the datetime attribute using + the current locale. Since Ant 1.6.2 No diff --git a/src/main/org/apache/tools/ant/taskdefs/Touch.java b/src/main/org/apache/tools/ant/taskdefs/Touch.java index 4a4118cef..c6d79b7bd 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Touch.java +++ b/src/main/org/apache/tools/ant/taskdefs/Touch.java @@ -61,23 +61,29 @@ public class Touch extends Task { public static final DateFormatFactory DEFAULT_DF_FACTORY = new DateFormatFactory() { - /* - * The initial version used DateFormat.SHORT for the - * time format, which ignores seconds. If we want - * seconds as well, we need DateFormat.MEDIUM, which - * in turn would break all old build files. - * - * First try to parse with DateFormat.SHORT and if - * that fails with MEDIUM - throw an exception if both - * fail. - */ + + private ThreadLocal primary = + new ThreadLocal() { + @Override + protected DateFormat initialValue() { + return new SimpleDateFormat("MM/dd/yyyy hh:mm a", + Locale.US); + } + }; + private ThreadLocal fallback = + new ThreadLocal() { + @Override + protected DateFormat initialValue() { + return new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a", + Locale.US); + } + }; + public DateFormat getPrimaryFormat() { - return DateFormat.getDateTimeInstance(DateFormat.SHORT, - DateFormat.SHORT, Locale.US); + return primary.get(); } public DateFormat getFallbackFormat() { - return DateFormat.getDateTimeInstance(DateFormat.SHORT, - DateFormat.MEDIUM, Locale.US); + return fallback.get(); } }; private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); diff --git a/src/main/org/apache/tools/ant/types/resources/selectors/Date.java b/src/main/org/apache/tools/ant/types/resources/selectors/Date.java index 8541e8580..0719a1855 100644 --- a/src/main/org/apache/tools/ant/types/resources/selectors/Date.java +++ b/src/main/org/apache/tools/ant/types/resources/selectors/Date.java @@ -137,10 +137,10 @@ public class Date implements ResourceSelector { throw new BuildException(MILLIS_OR_DATETIME); } if (millis == null) { - DateFormat df = ((pattern == null) - ? DateFormat.getDateTimeInstance( - DateFormat.SHORT, DateFormat.SHORT, Locale.US) - : new SimpleDateFormat(pattern)); + String p = pattern == null ? "MM/dd/yyyy hh:mm a" : pattern; + DateFormat df = pattern == null + ? new SimpleDateFormat(p, Locale.US) + : new SimpleDateFormat(p); try { long m = df.parse(dateTime).getTime(); if (m < 0) { @@ -151,9 +151,8 @@ public class Date implements ResourceSelector { setMillis(m); } catch (ParseException pe) { throw new BuildException("Date of " + dateTime - + " Cannot be parsed correctly. It should be in" - + (pattern == null - ? " MM/DD/YYYY HH:MM AM_PM" : pattern) + " format."); + + " Cannot be parsed correctly. It should be in '" + + p + "' format."); } } return when.evaluate(r.getLastModified(), millis.longValue(), granularity); diff --git a/src/main/org/apache/tools/ant/types/selectors/BaseSelector.java b/src/main/org/apache/tools/ant/types/selectors/BaseSelector.java index 61d7a1a27..414390edf 100644 --- a/src/main/org/apache/tools/ant/types/selectors/BaseSelector.java +++ b/src/main/org/apache/tools/ant/types/selectors/BaseSelector.java @@ -34,7 +34,7 @@ import org.apache.tools.ant.types.DataType; public abstract class BaseSelector extends DataType implements FileSelector { private String errmsg = null; - + private Throwable cause; /** * Do nothing constructor. @@ -54,6 +54,19 @@ public abstract class BaseSelector extends DataType implements FileSelector { } } + /** + * Allows all selectors to indicate a setup error. Note that only + * the first error message is recorded. + * + * @param msg The error message any BuildException should throw. + */ + public void setError(String msg, Throwable cause) { + if (errmsg == null) { + errmsg = msg; + this.cause = cause; + } + } + /** * Returns any error messages that have been set. * @@ -87,7 +100,7 @@ public abstract class BaseSelector extends DataType implements FileSelector { verifySettings(); } if (getError() != null) { - throw new BuildException(errmsg); + throw new BuildException(errmsg, cause); } if (!isReference()) { dieOnCircularReference(); diff --git a/src/main/org/apache/tools/ant/types/selectors/DateSelector.java b/src/main/org/apache/tools/ant/types/selectors/DateSelector.java index aea94a8be..8232e45f3 100644 --- a/src/main/org/apache/tools/ant/types/selectors/DateSelector.java +++ b/src/main/org/apache/tools/ant/types/selectors/DateSelector.java @@ -209,11 +209,10 @@ public class DateSelector extends BaseExtendSelector { setError("You must provide a datetime or the number of " + "milliseconds."); } else if (millis < 0 && dateTime != null) { - // check millis and only set it once. - DateFormat df = ((pattern == null) - ? DateFormat.getDateTimeInstance( - DateFormat.SHORT, DateFormat.SHORT, Locale.US) - : new SimpleDateFormat(pattern)); + String p = pattern == null ? "MM/dd/yyyy hh:mm a" : pattern; + DateFormat df = pattern == null + ? new SimpleDateFormat(p, Locale.US) + : new SimpleDateFormat(p); try { setMillis(df.parse(dateTime).getTime()); @@ -224,9 +223,8 @@ public class DateSelector extends BaseExtendSelector { } } catch (ParseException pe) { setError("Date of " + dateTime - + " Cannot be parsed correctly. It should be in" - + ((pattern == null) - ? " MM/DD/YYYY HH:MM AM_PM" : pattern) + " format."); + + " Cannot be parsed correctly. It should be in '" + + p + "' format.", pe); } } } diff --git a/src/tests/junit/org/apache/tools/ant/types/selectors/DateSelectorTest.java b/src/tests/junit/org/apache/tools/ant/types/selectors/DateSelectorTest.java index 43278f491..7eb9501a9 100644 --- a/src/tests/junit/org/apache/tools/ant/types/selectors/DateSelectorTest.java +++ b/src/tests/junit/org/apache/tools/ant/types/selectors/DateSelectorTest.java @@ -73,7 +73,7 @@ public class DateSelectorTest { } catch (BuildException be3) { assertEquals("Date of this is not a date" + " Cannot be parsed correctly. It should be in" - + " MM/DD/YYYY HH:MM AM_PM format.", be3.getMessage()); + + " 'MM/dd/yyyy hh:mm a' format.", be3.getMessage()); } s = new DateSelector(); From 2df17719cb24d34a73f884526aae939effa916d4 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Sun, 31 Jul 2016 09:30:37 +0200 Subject: [PATCH 2/3] line-ends --- .../ant/types/selectors/DateSelectorTest.java | 458 +++++++++--------- 1 file changed, 229 insertions(+), 229 deletions(-) diff --git a/src/tests/junit/org/apache/tools/ant/types/selectors/DateSelectorTest.java b/src/tests/junit/org/apache/tools/ant/types/selectors/DateSelectorTest.java index 7eb9501a9..e622be1f4 100644 --- a/src/tests/junit/org/apache/tools/ant/types/selectors/DateSelectorTest.java +++ b/src/tests/junit/org/apache/tools/ant/types/selectors/DateSelectorTest.java @@ -1,229 +1,229 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.apache.tools.ant.types.selectors; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.types.Parameter; -import org.junit.Assume; -import org.junit.Rule; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; - - -/** - * Tests Date Selectors. - * - */ -public class DateSelectorTest { - - @Rule - public final BaseSelectorRule selectorRule = new BaseSelectorRule(); - - - /** - * Test the code that validates the selector. - */ - @Test - public void testValidate() { - DateSelector s = new DateSelector(); - try { - s.isSelected(selectorRule.getProject().getBaseDir(),selectorRule.getFilenames()[0],selectorRule.getFiles()[0]); - fail("DateSelector did not check for required fields"); - } catch (BuildException be1) { - assertEquals("You must provide a datetime or the number of " - + "milliseconds.", be1.getMessage()); - } - - s = new DateSelector(); - s.setDatetime("01/01/1969 01:01 AM"); - try { - s.isSelected(selectorRule.getProject().getBaseDir(),selectorRule.getFilenames()[0],selectorRule.getFiles()[0]); - fail("DateSelector did not check for Datetime being in the " - + "allowable range"); - } catch (BuildException be2) { - assertEquals("Date of 01/01/1969 01:01 AM results in negative " - + "milliseconds value relative to epoch (January 1, " - + "1970, 00:00:00 GMT).", be2.getMessage()); - } - - s = new DateSelector(); - s.setDatetime("this is not a date"); - try { - s.isSelected(selectorRule.getProject().getBaseDir(),selectorRule.getFilenames()[0],selectorRule.getFiles()[0]); - fail("DateSelector did not check for Datetime being in a " - + "valid format"); - } catch (BuildException be3) { - assertEquals("Date of this is not a date" - + " Cannot be parsed correctly. It should be in" - + " 'MM/dd/yyyy hh:mm a' format.", be3.getMessage()); - } - - s = new DateSelector(); - Parameter param = new Parameter(); - param.setName("garbage in"); - param.setValue("garbage out"); - Parameter[] params = new Parameter[1]; - params[0] = param; - s.setParameters(params); - try { - s.isSelected(selectorRule.getProject().getBaseDir(),selectorRule.getFilenames()[0],selectorRule.getFiles()[0]); - fail("DateSelector did not check for valid parameter element"); - } catch (BuildException be4) { - assertEquals("Invalid parameter garbage in", be4.getMessage()); - } - - s = new DateSelector(); - param = new Parameter(); - param.setName("millis"); - param.setValue("garbage out"); - params[0] = param; - s.setParameters(params); - try { - s.isSelected(selectorRule.getProject().getBaseDir(),selectorRule.getFilenames()[0],selectorRule.getFiles()[0]); - fail("DateSelector did not check for valid millis parameter"); - } catch (BuildException be5) { - assertEquals("Invalid millisecond setting garbage out", - be5.getMessage()); - } - - s = new DateSelector(); - param = new Parameter(); - param.setName("granularity"); - param.setValue("garbage out"); - params[0] = param; - s.setParameters(params); - try { - s.isSelected(selectorRule.getProject().getBaseDir(),selectorRule.getFilenames()[0],selectorRule.getFiles()[0]); - fail("DateSelector did not check for valid granularity parameter"); - } catch (BuildException be6) { - assertEquals("Invalid granularity setting garbage out", - be6.getMessage()); - } - - } - - /** - * Tests to make sure that the selector is selecting files correctly. - */ - @Test - public void testSelectionBehaviour() { - DateSelector s; - String results; - - DateSelector.TimeComparisons before = new - DateSelector.TimeComparisons(); - before.setValue("before"); - DateSelector.TimeComparisons equal = new - DateSelector.TimeComparisons(); - equal.setValue("equal"); - DateSelector.TimeComparisons after = new - DateSelector.TimeComparisons(); - after.setValue("after"); - - - s = new DateSelector(); - s.setDatetime("10/10/1999 1:45 PM"); - s.setWhen(before); - results = selectorRule.selectionString(s); - assertEquals("TFFFFFFFFFFT", results); - - s = new DateSelector(); - s.setDatetime("10/10/1999 1:45 PM"); - s.setWhen(before); - s.setCheckdirs(true); - results = selectorRule.selectionString(s); - assertEquals("FFFFFFFFFFFF", results); - - s = new DateSelector(); - s.setDatetime("10/10/1999 1:45 PM"); - s.setWhen(after); - results = selectorRule.selectionString(s); - assertEquals("TTTTTTTTTTTT", results); - - s = new DateSelector(); - s.setDatetime("11/21/2001 4:54 AM"); - s.setWhen(before); - results = selectorRule.selectionString(s); - assertEquals("TFTFFFFFFFFT", results); - - s = new DateSelector(); - s.setDatetime("11/21/2001 4:55 AM"); - - long milliseconds = s.getMillis(); - s.setWhen(equal); - results = selectorRule.selectionString(s); - assertEquals("TTFFTFFFTTTT", results); - - s = new DateSelector(); - s.setMillis(milliseconds); - s.setWhen(equal); - results = selectorRule.selectionString(s); - assertEquals("TTFFTFFFTTTT", results); - - s = new DateSelector(); - s.setDatetime("11/21/2001 4:56 AM"); - s.setWhen(after); - results = selectorRule.selectionString(s); - assertEquals("TFFTFTTTFFFT", results); - - s = new DateSelector(); - Parameter param1 = new Parameter(); - Parameter param2 = new Parameter(); - param1.setName("datetime"); - param1.setValue("11/21/2001 4:56 AM"); - param2.setName("when"); - param2.setValue("after"); - Parameter[] params = {param1,param2}; - s.setParameters(params); - results = selectorRule.selectionString(s); - assertEquals("TFFTFTTTFFFT", results); - - s = new DateSelector(); - long testtime = selectorRule.getMirrorFiles()[5].lastModified(); - s.setMillis(testtime); - s.setWhen(after); - s.setGranularity(2); - - // setup the modified timestamp to match what the test needs, although be aware that the 3rd and 4th - // files don't exist so can't be changed, so don't try and loop over them - for (int i = 1; i <=2; i++) { - Assume.assumeTrue("Cannot setup file times for test", selectorRule.getMirrorFiles()[i].setLastModified(testtime - (3*60*60*100))); - } - - - results = selectorRule.mirrorSelectionString(s); - assertEquals("TFFFFTTTTTTT", results); - - s = new DateSelector(); - testtime = selectorRule.getMirrorFiles()[6].lastModified(); - s.setMillis(testtime); - s.setWhen(before); - s.setGranularity(2); - for (int i = 7; i <= 10; i++) { - Assume.assumeTrue("Cannot setup file times for test", selectorRule.getMirrorFiles()[i].setLastModified(testtime + (3*60*60*100))); - } - - results = selectorRule.mirrorSelectionString(s); - assertEquals("TTTTTTTFFFFT", results); - - } - -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.types.selectors; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.types.Parameter; +import org.junit.Assume; +import org.junit.Rule; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + + +/** + * Tests Date Selectors. + * + */ +public class DateSelectorTest { + + @Rule + public final BaseSelectorRule selectorRule = new BaseSelectorRule(); + + + /** + * Test the code that validates the selector. + */ + @Test + public void testValidate() { + DateSelector s = new DateSelector(); + try { + s.isSelected(selectorRule.getProject().getBaseDir(),selectorRule.getFilenames()[0],selectorRule.getFiles()[0]); + fail("DateSelector did not check for required fields"); + } catch (BuildException be1) { + assertEquals("You must provide a datetime or the number of " + + "milliseconds.", be1.getMessage()); + } + + s = new DateSelector(); + s.setDatetime("01/01/1969 01:01 AM"); + try { + s.isSelected(selectorRule.getProject().getBaseDir(),selectorRule.getFilenames()[0],selectorRule.getFiles()[0]); + fail("DateSelector did not check for Datetime being in the " + + "allowable range"); + } catch (BuildException be2) { + assertEquals("Date of 01/01/1969 01:01 AM results in negative " + + "milliseconds value relative to epoch (January 1, " + + "1970, 00:00:00 GMT).", be2.getMessage()); + } + + s = new DateSelector(); + s.setDatetime("this is not a date"); + try { + s.isSelected(selectorRule.getProject().getBaseDir(),selectorRule.getFilenames()[0],selectorRule.getFiles()[0]); + fail("DateSelector did not check for Datetime being in a " + + "valid format"); + } catch (BuildException be3) { + assertEquals("Date of this is not a date" + + " Cannot be parsed correctly. It should be in" + + " 'MM/dd/yyyy hh:mm a' format.", be3.getMessage()); + } + + s = new DateSelector(); + Parameter param = new Parameter(); + param.setName("garbage in"); + param.setValue("garbage out"); + Parameter[] params = new Parameter[1]; + params[0] = param; + s.setParameters(params); + try { + s.isSelected(selectorRule.getProject().getBaseDir(),selectorRule.getFilenames()[0],selectorRule.getFiles()[0]); + fail("DateSelector did not check for valid parameter element"); + } catch (BuildException be4) { + assertEquals("Invalid parameter garbage in", be4.getMessage()); + } + + s = new DateSelector(); + param = new Parameter(); + param.setName("millis"); + param.setValue("garbage out"); + params[0] = param; + s.setParameters(params); + try { + s.isSelected(selectorRule.getProject().getBaseDir(),selectorRule.getFilenames()[0],selectorRule.getFiles()[0]); + fail("DateSelector did not check for valid millis parameter"); + } catch (BuildException be5) { + assertEquals("Invalid millisecond setting garbage out", + be5.getMessage()); + } + + s = new DateSelector(); + param = new Parameter(); + param.setName("granularity"); + param.setValue("garbage out"); + params[0] = param; + s.setParameters(params); + try { + s.isSelected(selectorRule.getProject().getBaseDir(),selectorRule.getFilenames()[0],selectorRule.getFiles()[0]); + fail("DateSelector did not check for valid granularity parameter"); + } catch (BuildException be6) { + assertEquals("Invalid granularity setting garbage out", + be6.getMessage()); + } + + } + + /** + * Tests to make sure that the selector is selecting files correctly. + */ + @Test + public void testSelectionBehaviour() { + DateSelector s; + String results; + + DateSelector.TimeComparisons before = new + DateSelector.TimeComparisons(); + before.setValue("before"); + DateSelector.TimeComparisons equal = new + DateSelector.TimeComparisons(); + equal.setValue("equal"); + DateSelector.TimeComparisons after = new + DateSelector.TimeComparisons(); + after.setValue("after"); + + + s = new DateSelector(); + s.setDatetime("10/10/1999 1:45 PM"); + s.setWhen(before); + results = selectorRule.selectionString(s); + assertEquals("TFFFFFFFFFFT", results); + + s = new DateSelector(); + s.setDatetime("10/10/1999 1:45 PM"); + s.setWhen(before); + s.setCheckdirs(true); + results = selectorRule.selectionString(s); + assertEquals("FFFFFFFFFFFF", results); + + s = new DateSelector(); + s.setDatetime("10/10/1999 1:45 PM"); + s.setWhen(after); + results = selectorRule.selectionString(s); + assertEquals("TTTTTTTTTTTT", results); + + s = new DateSelector(); + s.setDatetime("11/21/2001 4:54 AM"); + s.setWhen(before); + results = selectorRule.selectionString(s); + assertEquals("TFTFFFFFFFFT", results); + + s = new DateSelector(); + s.setDatetime("11/21/2001 4:55 AM"); + + long milliseconds = s.getMillis(); + s.setWhen(equal); + results = selectorRule.selectionString(s); + assertEquals("TTFFTFFFTTTT", results); + + s = new DateSelector(); + s.setMillis(milliseconds); + s.setWhen(equal); + results = selectorRule.selectionString(s); + assertEquals("TTFFTFFFTTTT", results); + + s = new DateSelector(); + s.setDatetime("11/21/2001 4:56 AM"); + s.setWhen(after); + results = selectorRule.selectionString(s); + assertEquals("TFFTFTTTFFFT", results); + + s = new DateSelector(); + Parameter param1 = new Parameter(); + Parameter param2 = new Parameter(); + param1.setName("datetime"); + param1.setValue("11/21/2001 4:56 AM"); + param2.setName("when"); + param2.setValue("after"); + Parameter[] params = {param1,param2}; + s.setParameters(params); + results = selectorRule.selectionString(s); + assertEquals("TFFTFTTTFFFT", results); + + s = new DateSelector(); + long testtime = selectorRule.getMirrorFiles()[5].lastModified(); + s.setMillis(testtime); + s.setWhen(after); + s.setGranularity(2); + + // setup the modified timestamp to match what the test needs, although be aware that the 3rd and 4th + // files don't exist so can't be changed, so don't try and loop over them + for (int i = 1; i <=2; i++) { + Assume.assumeTrue("Cannot setup file times for test", selectorRule.getMirrorFiles()[i].setLastModified(testtime - (3*60*60*100))); + } + + + results = selectorRule.mirrorSelectionString(s); + assertEquals("TFFFFTTTTTTT", results); + + s = new DateSelector(); + testtime = selectorRule.getMirrorFiles()[6].lastModified(); + s.setMillis(testtime); + s.setWhen(before); + s.setGranularity(2); + for (int i = 7; i <= 10; i++) { + Assume.assumeTrue("Cannot setup file times for test", selectorRule.getMirrorFiles()[i].setLastModified(testtime + (3*60*60*100))); + } + + results = selectorRule.mirrorSelectionString(s); + assertEquals("TTTTTTTFFFFT", results); + + } + +} From a62d5f9f2a9e329c9b5d233b15b658b4e25f4018 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Sun, 31 Jul 2016 09:36:41 +0200 Subject: [PATCH 3/3] formatting --- .../taskdefs/optional/TraXLiaisonTest.java | 258 +++++++++--------- 1 file changed, 129 insertions(+), 129 deletions(-) diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java index 144414142..52605b4b3 100644 --- a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java +++ b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java @@ -1,129 +1,129 @@ -package org.apache.tools.ant.taskdefs.optional; - -import static org.junit.Assert.assertTrue; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.InputStream; -import java.security.Permission; - -import junit.framework.AssertionFailedError; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.taskdefs.XSLTLiaison; -import org.apache.tools.ant.taskdefs.XSLTLogger; -import org.apache.tools.ant.util.JAXPUtils; -import org.junit.After; -import org.junit.Assume; -import org.junit.Test; - -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -/** - * TraX XSLTLiaison testcase - */ -public class TraXLiaisonTest extends AbstractXSLTLiaisonTest - implements XSLTLogger { - - - @After - public void tearDown() { - File f = new File("xalan2-redirect-out.tmp"); - if (f.exists()) { - f.delete(); - } - } - - public XSLTLiaison createLiaison() throws Exception { - TraXLiaison l = new TraXLiaison(); - l.setLogger(this); - return l; - } - - @Test - public void testXalan2Redirect() throws Exception { - try { - getClass().getClassLoader().loadClass("org.apache.xalan.lib.Redirect"); - } catch (Exception exc) { - Assume.assumeNoException("xalan redirect is not on the classpath", exc); - } - File xsl = getFile("/taskdefs/optional/xalan-redirect-in.xsl"); - liaison.setStylesheet(xsl); - File out = new File("xalan2-redirect-out-dummy.tmp"); - File in = getFile("/taskdefs/optional/xsltliaison-in.xsl"); - ClassLoader orig = Thread.currentThread().getContextClassLoader(); - try { - liaison.addParam("xalan-version", "2"); - // Use the JRE's Xerces, not lib/optional/xerces.jar: - Thread.currentThread().setContextClassLoader(new ClassLoader(ClassLoader.getSystemClassLoader().getParent()) { - public InputStream getResourceAsStream(String name) { - if (name.startsWith("META-INF/services/")) { - // work around JAXP #6723276 in JDK 6 - return new ByteArrayInputStream(new byte[0]); - } - return super.getResourceAsStream(name); - } - }); - // Tickle #52382: - System.setSecurityManager(new SecurityManager() {public void checkPermission(Permission perm) {}}); - liaison.transform(in, out); - } finally { - out.delete(); - Thread.currentThread().setContextClassLoader(orig); - System.setSecurityManager(null); - } - } - - @Test - public void testMultipleTransform() throws Exception { - File xsl = getFile("/taskdefs/optional/xsltliaison-in.xsl"); - liaison.setStylesheet(xsl); - liaison.addParam("param", "value"); - File in = getFile("/taskdefs/optional/xsltliaison-in.xml"); - // test for 10 consecutives transform - for (int i = 0; i < 50; i++){ - File out = new File("xsltliaison" + i + ".tmp"); - try { - liaison.transform(in, out); - } catch (Exception e){ - throw new BuildException("failed in transform " + i, e); - } finally { - out.delete(); - } - } - } - - @Test - public void testSystemId(){ - File file = null; - if ( File.separatorChar == '\\' ){ - file = new File("d:\\jdk"); - } else { - file = new File("/user/local/bin"); - } - String systemid = JAXPUtils.getSystemId(file); - assertTrue("SystemIDs should start by file:/", systemid.startsWith("file:/")); - assertTrue("SystemIDs should not start with file:////", !systemid.startsWith("file:////")); - } - - public void log(String message) { - throw new AssertionFailedError("Liaison sent message: "+message); - } - -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.taskdefs.optional; + +import static org.junit.Assert.assertTrue; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.InputStream; +import java.security.Permission; + +import junit.framework.AssertionFailedError; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.taskdefs.XSLTLiaison; +import org.apache.tools.ant.taskdefs.XSLTLogger; +import org.apache.tools.ant.util.JAXPUtils; +import org.junit.After; +import org.junit.Assume; +import org.junit.Test; + +/** + * TraX XSLTLiaison testcase + */ +public class TraXLiaisonTest extends AbstractXSLTLiaisonTest + implements XSLTLogger { + + + @After + public void tearDown() { + File f = new File("xalan2-redirect-out.tmp"); + if (f.exists()) { + f.delete(); + } + } + + public XSLTLiaison createLiaison() throws Exception { + TraXLiaison l = new TraXLiaison(); + l.setLogger(this); + return l; + } + + @Test + public void testXalan2Redirect() throws Exception { + try { + getClass().getClassLoader().loadClass("org.apache.xalan.lib.Redirect"); + } catch (Exception exc) { + Assume.assumeNoException("xalan redirect is not on the classpath", exc); + } + File xsl = getFile("/taskdefs/optional/xalan-redirect-in.xsl"); + liaison.setStylesheet(xsl); + File out = new File("xalan2-redirect-out-dummy.tmp"); + File in = getFile("/taskdefs/optional/xsltliaison-in.xsl"); + ClassLoader orig = Thread.currentThread().getContextClassLoader(); + try { + liaison.addParam("xalan-version", "2"); + // Use the JRE's Xerces, not lib/optional/xerces.jar: + Thread.currentThread().setContextClassLoader(new ClassLoader(ClassLoader.getSystemClassLoader().getParent()) { + public InputStream getResourceAsStream(String name) { + if (name.startsWith("META-INF/services/")) { + // work around JAXP #6723276 in JDK 6 + return new ByteArrayInputStream(new byte[0]); + } + return super.getResourceAsStream(name); + } + }); + // Tickle #52382: + System.setSecurityManager(new SecurityManager() {public void checkPermission(Permission perm) {}}); + liaison.transform(in, out); + } finally { + out.delete(); + Thread.currentThread().setContextClassLoader(orig); + System.setSecurityManager(null); + } + } + + @Test + public void testMultipleTransform() throws Exception { + File xsl = getFile("/taskdefs/optional/xsltliaison-in.xsl"); + liaison.setStylesheet(xsl); + liaison.addParam("param", "value"); + File in = getFile("/taskdefs/optional/xsltliaison-in.xml"); + // test for 10 consecutives transform + for (int i = 0; i < 50; i++){ + File out = new File("xsltliaison" + i + ".tmp"); + try { + liaison.transform(in, out); + } catch (Exception e){ + throw new BuildException("failed in transform " + i, e); + } finally { + out.delete(); + } + } + } + + @Test + public void testSystemId(){ + File file = null; + if ( File.separatorChar == '\\' ){ + file = new File("d:\\jdk"); + } else { + file = new File("/user/local/bin"); + } + String systemid = JAXPUtils.getSystemId(file); + assertTrue("SystemIDs should start by file:/", systemid.startsWith("file:/")); + assertTrue("SystemIDs should not start with file:////", !systemid.startsWith("file:////")); + } + + public void log(String message) { + throw new AssertionFailedError("Liaison sent message: "+message); + } + +}