| @@ -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); | |||
| } | |||
| } | |||