001package org.eclipse.aether.util.version; 002 003/* 004 * Licensed to the Apache Software Foundation (ASF) under one 005 * or more contributor license agreements. See the NOTICE file 006 * distributed with this work for additional information 007 * regarding copyright ownership. The ASF licenses this file 008 * to you under the Apache License, Version 2.0 (the 009 * "License"); you may not use this file except in compliance 010 * with the License. You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, 015 * software distributed under the License is distributed on an 016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 017 * KIND, either express or implied. See the License for the 018 * specific language governing permissions and limitations 019 * under the License. 020 */ 021 022import static org.junit.Assert.*; 023 024import org.eclipse.aether.util.version.GenericVersion; 025import org.eclipse.aether.util.version.GenericVersionRange; 026import org.eclipse.aether.version.InvalidVersionSpecificationException; 027import org.eclipse.aether.version.Version; 028import org.eclipse.aether.version.VersionRange; 029import org.junit.Test; 030 031public class GenericVersionRangeTest 032{ 033 034 private Version newVersion( String version ) 035 { 036 return new GenericVersion( version ); 037 } 038 039 private VersionRange parseValid( String range ) 040 { 041 try 042 { 043 return new GenericVersionRange( range ); 044 } 045 catch ( InvalidVersionSpecificationException e ) 046 { 047 throw new AssertionError( range + " should be valid but failed to parse due to: " + e.getMessage(), e ); 048 } 049 } 050 051 private void parseInvalid( String range ) 052 { 053 try 054 { 055 new GenericVersionRange( range ); 056 fail( range + " should be invalid" ); 057 } 058 catch ( InvalidVersionSpecificationException e ) 059 { 060 assertTrue( true ); 061 } 062 } 063 064 private void assertContains( VersionRange range, String version ) 065 { 066 assertTrue( range + " should contain " + version, range.containsVersion( newVersion( version ) ) ); 067 } 068 069 private void assertNotContains( VersionRange range, String version ) 070 { 071 assertFalse( range + " should not contain " + version, range.containsVersion( newVersion( version ) ) ); 072 } 073 074 @Test 075 public void testLowerBoundInclusiveUpperBoundInclusive() 076 { 077 VersionRange range = parseValid( "[1,2]" ); 078 assertContains( range, "1" ); 079 assertContains( range, "1.1-SNAPSHOT" ); 080 assertContains( range, "2" ); 081 assertEquals( range, parseValid( range.toString() ) ); 082 } 083 084 @Test 085 public void testLowerBoundInclusiveUpperBoundExclusive() 086 { 087 VersionRange range = parseValid( "[1.2.3.4.5,1.2.3.4.6)" ); 088 assertContains( range, "1.2.3.4.5" ); 089 assertNotContains( range, "1.2.3.4.6" ); 090 assertEquals( range, parseValid( range.toString() ) ); 091 } 092 093 @Test 094 public void testLowerBoundExclusiveUpperBoundInclusive() 095 { 096 VersionRange range = parseValid( "(1a,1b]" ); 097 assertNotContains( range, "1a" ); 098 assertContains( range, "1b" ); 099 assertEquals( range, parseValid( range.toString() ) ); 100 } 101 102 @Test 103 public void testLowerBoundExclusiveUpperBoundExclusive() 104 { 105 VersionRange range = parseValid( "(1,3)" ); 106 assertNotContains( range, "1" ); 107 assertContains( range, "2-SNAPSHOT" ); 108 assertNotContains( range, "3" ); 109 assertEquals( range, parseValid( range.toString() ) ); 110 } 111 112 @Test 113 public void testSingleVersion() 114 { 115 VersionRange range = parseValid( "[1]" ); 116 assertContains( range, "1" ); 117 assertEquals( range, parseValid( range.toString() ) ); 118 119 range = parseValid( "[1,1]" ); 120 assertContains( range, "1" ); 121 assertEquals( range, parseValid( range.toString() ) ); 122 } 123 124 @Test 125 public void testSingleWildcardVersion() 126 { 127 VersionRange range = parseValid( "[1.2.*]" ); 128 assertContains( range, "1.2-alpha-1" ); 129 assertContains( range, "1.2-SNAPSHOT" ); 130 assertContains( range, "1.2" ); 131 assertContains( range, "1.2.9999999" ); 132 assertNotContains( range, "1.3-rc-1" ); 133 assertEquals( range, parseValid( range.toString() ) ); 134 } 135 136 @Test 137 public void testMissingOpenCloseDelimiter() 138 { 139 parseInvalid( "1.0" ); 140 } 141 142 @Test 143 public void testMissingOpenDelimiter() 144 { 145 parseInvalid( "1.0]" ); 146 parseInvalid( "1.0)" ); 147 } 148 149 @Test 150 public void testMissingCloseDelimiter() 151 { 152 parseInvalid( "[1.0" ); 153 parseInvalid( "(1.0" ); 154 } 155 156 @Test 157 public void testTooManyVersions() 158 { 159 parseInvalid( "[1,2,3]" ); 160 parseInvalid( "(1,2,3)" ); 161 parseInvalid( "[1,2,3)" ); 162 } 163 164}