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