/* | |
* 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); | |
} | |
} |