/* * Copyright 1999-2006 University of Chicago * * Licensed 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.dcache.ftp.client.test; import org.dcache.ftp.client.ByteRange; import junit.framework.TestCase; import junit.framework.Test; import junit.framework.TestSuite; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** Test ByteRange **/ public class ByteRangeTest extends TestCase { private static Logger logger = LoggerFactory.getLogger(FeatureListTest.class); public static void main(String[] argv) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ByteRangeTest.class); } public ByteRangeTest(String name) { super(name); } public void test() { //trivial assertMerge(0,0, 0,0, 0,0, ByteRange.THIS_SUPERSET); assertMerge(52,52, 52,52, 52,52, ByteRange.THIS_SUPERSET); assertMerge(12,15, 12,15, 12,15, ByteRange.THIS_SUPERSET); // now testing all cases: adjacent / subset / superset / separate // mnemotechnic notation: // first range = t // second range = o // common subset = - // t o assertMerge(1,4, 7,8, 1,4, ByteRange.THIS_BELOW); // o t assertMerge(7,8, 1,4, 7,8, ByteRange.THIS_ABOVE); // ot assertMerge(5,7, 1,4, 1,7, ByteRange.ADJACENT); // to assertMerge(1,4, 5,7, 1,7, ByteRange.ADJACENT); // o-t assertMerge(3,15, -3,4, -3,15, ByteRange.ADJACENT); // t-o assertMerge(1,2, 2,4, 1,4, ByteRange.ADJACENT); // o- assertMerge(3,15, -3,15, -3,15, ByteRange.THIS_SUBSET); // t- assertMerge(-3,15, 3,15, -3,15, ByteRange.THIS_SUPERSET); // t-t assertMerge(-3,30, 3,15, -3,30, ByteRange.THIS_SUPERSET); // o-o assertMerge(3,15, -3,30, -3,30, ByteRange.THIS_SUBSET); // -t assertMerge(0,2, 0,0, 0,2, ByteRange.THIS_SUPERSET); // -o assertMerge(0,0, 0,2, 0,2, ByteRange.THIS_SUBSET); // - assertMerge(3,15, 3,15, 3,15, ByteRange.THIS_SUPERSET); //more about: separate or adjacent? assertMerge(1,1, 2,2, 1,2, ByteRange.ADJACENT); assertMerge(1,1, 4,4, 1,1, ByteRange.THIS_BELOW); assertMerge(-5,5, 6,9, -5,9, ByteRange.ADJACENT); assertMerge(-5,5, 7,9, -5,5, ByteRange.THIS_BELOW); assertConstructorError(4,3); assertConstructorError(16,2); assertConstructorError(20, -21); } /* test ByteRange(from1,to1).merge(new ByteRange(from2, to2)); the result should (from3, to3) and expectedReturn should be returned. */ private void assertMerge(int from1, int to1, int from2, int to2, int from1after, int to1after, int expectedReturn) { logger.debug("checking: (" + from1 + ".." + to1 +") + (" + from2 + ".." + to2 +") = (" + from1after + ".." + to1after + ")"); ByteRange br1 = new ByteRange(from1, to1); ByteRange br2 = new ByteRange(from2, to2); int ret = br1.merge(br2); logger.debug("... -> (" + br1.from + ".." + br1.to + ")"); assertTrue(ret == expectedReturn); assertTrue(br1.from == from1after); assertTrue(br1.to == to1after); } private void assertConstructorError(int from, int to) { logger.debug("checking constructor: (" + from + "," + to + ")"); boolean threwOk = false; try { new ByteRange(from, to); } catch (IllegalArgumentException e) { threwOk = true; } if (! threwOk ) { fail("constructor did not throw an exception when it should have"); } logger.debug("okay, throws exception as expected."); } }