diff --git a/src/SDammann.WebApi.Versioning.Tests/Discovery/DefaultAttributeControllerVersionDetector.cs b/src/SDammann.WebApi.Versioning.Tests/Discovery/DefaultAttributeControllerVersionDetector.cs
index 8ca2b5e..4c35871 100644
--- a/src/SDammann.WebApi.Versioning.Tests/Discovery/DefaultAttributeControllerVersionDetector.cs
+++ b/src/SDammann.WebApi.Versioning.Tests/Discovery/DefaultAttributeControllerVersionDetector.cs
@@ -5,6 +5,7 @@
using TestSupport.Version1;
using TestSupport.Version1.Version;
using Versioning.Discovery;
+ using SDammann.WebApi.Versioning.Tests.TestSupport;
[TestClass]
public class DefaultAttributeControllerVersionDetectorTests {
@@ -35,5 +36,41 @@ public void NamespaceControllerVersionDetector_DetectsNoCatControllerVersion()
// assert
Assert.AreSame(UndefinedApiVersion.Instance, version, "Expected a no SemApiVersion instance to be detected");
}
+
+ ///
+ /// Test to see if support for 2 number versions is implemented correctly (using an ApiVersion(x, x) attribute)
+ ///
+ [TestMethod]
+ public void AttributeControllerVersionDetector_Detects3_5VersionByAttribute()
+ {
+ // given
+ IControllerVersionDetector detector = new DefaultAttributeControllerVersionDetector();
+ Type catControllerType = typeof(DogController);
+
+ // when
+ SemVerApiVersion version = detector.GetVersion(catControllerType) as SemVerApiVersion;
+
+ // assert
+ Assert.IsNotNull(version, "Expected a SemApiVersion instance to be detected");
+ Assert.AreEqual(new Version(3, 5), version.Version, "Expected a version 3.5 to be detected");
+ }
+
+ ///
+ /// Test to see if support for 3 number versions is implemented correctly (using an ApiVersion(x, x, x) attribute)
+ ///
+ [TestMethod]
+ public void AttributeControllerVersionDetector_Detects3_5_2VersionByAttribute()
+ {
+ // given
+ IControllerVersionDetector detector = new DefaultAttributeControllerVersionDetector();
+ Type catControllerType = typeof(HorseController);
+
+ // when
+ SemVerApiVersion version = detector.GetVersion(catControllerType) as SemVerApiVersion;
+
+ // assert
+ Assert.IsNotNull(version, "Expected a SemApiVersion instance to be detected");
+ Assert.AreEqual(new Version(1, 5, 2), version.Version, "Expected a version 1.5.2 to be detected");
+ }
}
}
diff --git a/src/SDammann.WebApi.Versioning.Tests/SDammann.WebApi.Versioning.Tests.csproj b/src/SDammann.WebApi.Versioning.Tests/SDammann.WebApi.Versioning.Tests.csproj
index ba81a2f..f0d9650 100644
--- a/src/SDammann.WebApi.Versioning.Tests/SDammann.WebApi.Versioning.Tests.csproj
+++ b/src/SDammann.WebApi.Versioning.Tests/SDammann.WebApi.Versioning.Tests.csproj
@@ -97,6 +97,8 @@
+
+
diff --git a/src/SDammann.WebApi.Versioning.Tests/TestSupport/DogController_v3_5.cs b/src/SDammann.WebApi.Versioning.Tests/TestSupport/DogController_v3_5.cs
new file mode 100644
index 0000000..cdb1f25
--- /dev/null
+++ b/src/SDammann.WebApi.Versioning.Tests/TestSupport/DogController_v3_5.cs
@@ -0,0 +1,10 @@
+namespace SDammann.WebApi.Versioning.Tests.TestSupport
+{
+ using System.Web.Http;
+ using SDammann.WebApi.Versioning.Discovery;
+
+ [ApiVersion(3, 5)]
+ internal class DogController : ApiController
+ {
+ }
+}
diff --git a/src/SDammann.WebApi.Versioning.Tests/TestSupport/HorseController_v1_5_2.cs b/src/SDammann.WebApi.Versioning.Tests/TestSupport/HorseController_v1_5_2.cs
new file mode 100644
index 0000000..96a5be0
--- /dev/null
+++ b/src/SDammann.WebApi.Versioning.Tests/TestSupport/HorseController_v1_5_2.cs
@@ -0,0 +1,10 @@
+namespace SDammann.WebApi.Versioning.Tests.TestSupport
+{
+ using System.Web.Http;
+ using SDammann.WebApi.Versioning.Discovery;
+
+ [ApiVersion(1, 5, 2)]
+ internal class HorseController : ApiController
+ {
+ }
+}
diff --git a/src/SDammann.WebApi.Versioning/Discovery/ApiVersionAttribute.cs b/src/SDammann.WebApi.Versioning/Discovery/ApiVersionAttribute.cs
index 39bf88f..9ea7c8a 100644
--- a/src/SDammann.WebApi.Versioning/Discovery/ApiVersionAttribute.cs
+++ b/src/SDammann.WebApi.Versioning/Discovery/ApiVersionAttribute.cs
@@ -1,11 +1,13 @@
-namespace SDammann.WebApi.Versioning.Discovery {
+namespace SDammann.WebApi.Versioning.Discovery
+{
using System;
///
/// This attribute can be used to decorate controllers to specify and API version
///
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
- public sealed class ApiVersionAttribute : Attribute {
+ public sealed class ApiVersionAttribute : Attribute
+ {
private readonly int _majorVersion;
private readonly int _minorVersion;
private readonly int _buildVersion = -1;
@@ -14,7 +16,8 @@ public sealed class ApiVersionAttribute : Attribute {
///
/// Initializes a new instance of the class.
///
- public ApiVersionAttribute(int majorVersion, int minorVersion) {
+ public ApiVersionAttribute(int majorVersion, int minorVersion)
+ {
this._majorVersion = majorVersion;
this._minorVersion = minorVersion;
}
@@ -22,7 +25,8 @@ public ApiVersionAttribute(int majorVersion, int minorVersion) {
///
/// Initializes a new instance of the class.
///
- public ApiVersionAttribute(int majorVersion, int minorVersion, int buildVersion) {
+ public ApiVersionAttribute(int majorVersion, int minorVersion, int buildVersion)
+ {
this._majorVersion = majorVersion;
this._minorVersion = minorVersion;
this._buildVersion = buildVersion;
@@ -31,7 +35,8 @@ public ApiVersionAttribute(int majorVersion, int minorVersion, int buildVersion)
///
/// Initializes a new instance of the class.
///
- public ApiVersionAttribute(int majorVersion, int minorVersion, int buildVersion, int revisionVersion) {
+ public ApiVersionAttribute(int majorVersion, int minorVersion, int buildVersion, int revisionVersion)
+ {
this._majorVersion = majorVersion;
this._minorVersion = minorVersion;
this._buildVersion = buildVersion;
@@ -41,11 +46,18 @@ public ApiVersionAttribute(int majorVersion, int minorVersion, int buildVersion,
///
/// Gets a instance based on the version information contained in this attribute
///
- public Version Version {
- get {
+ public Version Version
+ {
+ get
+ {
+ if (this._buildVersion == -1)
+ return new Version(this._majorVersion, this._minorVersion);
+ if (this._revisionVersion == -1)
+ return new Version(this._majorVersion, this._minorVersion, this._buildVersion);
+
return new Version(this._majorVersion, this._minorVersion, this._buildVersion, this._revisionVersion);
}
}
-
+
}
}
\ No newline at end of file