/** * Licensed to jclouds, Inc. (jclouds) under one or more * contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. jclouds 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.jclouds; import static org.jclouds.JcloudsVersion.VERSION_RESOURCE_FILE; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNull; import static org.testng.Assert.assertTrue; import java.io.InputStream; import java.util.List; import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; /** * @author Andrew Phillips */ @Test(singleThreaded = true) public class JcloudsVersionTest { @Test(expectedExceptions = { NullPointerException.class }) public void testFailsIfResourceFileMissing() { new JcloudsVersion(new ResourceHidingClassLoader(JcloudsVersion.class.getClassLoader(), VERSION_RESOURCE_FILE)); } @Test(expectedExceptions = { IllegalArgumentException.class }) public void testFailsIfInvalidVersion() { new JcloudsVersion("${project.version}"); } @Test(expectedExceptions = { IllegalArgumentException.class }) public void testFailsIfNonSemverReleaseCandidate() { // no longer supported after the 1.3.0 RC cycle new JcloudsVersion("1.2.3-rc-4"); } @Test(expectedExceptions = { IllegalArgumentException.class }) public void testFailsIfAlphaSnapshot() { new JcloudsVersion("1.2.3-alpha.5-SNAPSHOT"); } @Test(expectedExceptions = { IllegalArgumentException.class }) public void testFailsIfBetSanapshot() { new JcloudsVersion("1.2.3-beta.5-SNAPSHOT"); } @Test(expectedExceptions = { IllegalArgumentException.class }) public void testFailsIfReleaseCandidateSnapshot() { new JcloudsVersion("1.2.3-rc.4-SNAPSHOT"); } @Test public void testExtractsVersionFromResourceFile() { JcloudsVersion version = new JcloudsVersion(); assertEquals("0.0.0-SNAPSHOT", version.toString()); } @Test public void testExtractsMajorMinorPatchVersions() { JcloudsVersion version = new JcloudsVersion("1.2.3"); assertEquals(1, version.majorVersion); assertEquals(2, version.minorVersion); assertEquals(3, version.patchVersion); } @Test public void testSupportsNonSnapshot() { JcloudsVersion version = new JcloudsVersion("1.2.3"); assertFalse(version.snapshot, "Expected non-snapshot"); } @Test public void testRecognisesSnapshot() { JcloudsVersion version = new JcloudsVersion("1.2.3-SNAPSHOT"); assertTrue(version.snapshot, "Expected snapshot"); } @Test public void testSupportsReleaseVersion() { JcloudsVersion version = new JcloudsVersion("1.2.3"); assertFalse(version.alpha, "Expected non-alpha"); assertFalse(version.beta, "Expected non-beta"); assertNull(version.alphaVersion); assertNull(version.betaVersion); assertFalse(version.releaseCandidate, "Expected non-release candidate"); assertNull(version.releaseCandidateVersion); } @Test public void testRecognisesAlpha() { JcloudsVersion version = new JcloudsVersion("1.2.3-alpha.5"); assertTrue(version.alpha, "Expected alpha"); } @Test public void testExtractsAlphaVersion() { JcloudsVersion version = new JcloudsVersion("1.2.3-alpha.5"); assertEquals(Integer.valueOf(5), version.alphaVersion); } @Test public void testRecognisesBeta() { JcloudsVersion version = new JcloudsVersion("1.2.3-beta.5"); assertTrue(version.beta, "Expected beta"); } @Test public void testExtractsBetaVersion() { JcloudsVersion version = new JcloudsVersion("1.2.3-beta.5"); assertEquals(Integer.valueOf(5), version.betaVersion); } @Test public void testRecognisesReleaseCandidate() { JcloudsVersion version = new JcloudsVersion("1.2.3-rc.4"); assertTrue(version.releaseCandidate, "Expected release candidate"); } @Test public void testExtractsReleaseCandidateVersion() { JcloudsVersion version = new JcloudsVersion("1.2.3-rc.4"); assertEquals(Integer.valueOf(4), version.releaseCandidateVersion); } private static class ResourceHidingClassLoader extends ClassLoader { private final ClassLoader delegate; private final List<String> resourcesToHide; private ResourceHidingClassLoader(ClassLoader delegate, String... resourcesToHide) { this.delegate = delegate; this.resourcesToHide = ImmutableList.copyOf(resourcesToHide); } @Override public InputStream getResourceAsStream(String name) { return (Iterables.contains(resourcesToHide, name) ? null : delegate.getResourceAsStream(name)); } } }