Skip to content

Commit 8fa47cc

Browse files
author
Chris Martinez
committed
Update comparison of API version. Fixes #108.
1 parent b52bd0e commit 8fa47cc

File tree

2 files changed

+67
-13
lines changed

2 files changed

+67
-13
lines changed

src/Common/ApiVersion.cs

+37-13
Original file line numberDiff line numberDiff line change
@@ -499,23 +499,47 @@ public virtual int CompareTo( ApiVersion other )
499499

500500
var result = Nullable.Compare( GroupVersion, other.GroupVersion );
501501

502-
if ( result == 0 )
502+
if ( result != 0 )
503503
{
504-
result = Nullable.Compare( MajorVersion, other.MajorVersion );
504+
return result;
505+
}
505506

506-
if ( result == 0 )
507-
{
508-
result = ImpliedMinorVersion.CompareTo( other.ImpliedMinorVersion );
507+
result = Nullable.Compare( MajorVersion, other.MajorVersion );
508+
509+
if ( result != 0 )
510+
{
511+
return result;
512+
}
509513

510-
if ( result == 0 )
511-
{
512-
result = StringComparer.OrdinalIgnoreCase.Compare( Status, other.Status );
514+
result = ImpliedMinorVersion.CompareTo( other.ImpliedMinorVersion );
513515

514-
if ( result != 0 )
515-
{
516-
result = result < 0 ? -1 : 1;
517-
}
518-
}
516+
if ( result != 0 )
517+
{
518+
return result;
519+
}
520+
521+
if ( IsNullOrEmpty( Status ) )
522+
{
523+
if ( !IsNullOrEmpty( other.Status ) )
524+
{
525+
result = 1;
526+
}
527+
}
528+
else if ( IsNullOrEmpty( other.Status ) )
529+
{
530+
result = -1;
531+
}
532+
else
533+
{
534+
result = StringComparer.OrdinalIgnoreCase.Compare( Status, other.Status );
535+
536+
if ( result < 0 )
537+
{
538+
result = -1;
539+
}
540+
else if ( result > 0 )
541+
{
542+
result = 1;
519543
}
520544
}
521545

test/Microsoft.AspNet.WebApi.Versioning.Tests/ApiVersionTest.cs

+30
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,8 @@ public void ne_should_return_true_when_api_versions_are_not_equal()
488488
[InlineData( "2013-08-06", "2013-08-06", 0 )]
489489
[InlineData( "2013-08-07", "2013-08-06", 1 )]
490490
[InlineData( "2013-08-05", "2013-08-06", -1 )]
491+
[InlineData( "2013-08-06", "2013-08-06-RC", 1 )]
492+
[InlineData( "2013-08-06-RC", "2013-08-06", -1 )]
491493
[InlineData( "2013-08-06-Alpha", "2013-08-06-Alpha", 0 )]
492494
[InlineData( "2013-08-06-Beta", "2013-08-06-Alpha", 1 )]
493495
[InlineData( "2013-08-06-Alpha", "2013-08-06-Beta", -1 )]
@@ -496,13 +498,17 @@ public void ne_should_return_true_when_api_versions_are_not_equal()
496498
[InlineData( "1.1", "1.1", 0 )]
497499
[InlineData( "2.0", "1.1", 1 )]
498500
[InlineData( "1.1", "2.0", -1 )]
501+
[InlineData( "1.1", "1.1-Beta", 1 )]
502+
[InlineData( "1.1-Beta", "1.1", -1 )]
499503
[InlineData( "1-Alpha", "1-Alpha", 0 )]
500504
[InlineData( "1-Alpha", "1.0-Alpha", 0 )]
501505
[InlineData( "1.1-Alpha", "1.1-Alpha", 0 )]
502506
[InlineData( "1.1-Beta", "1.1-Alpha", 1 )]
503507
[InlineData( "1.1-Alpha", "1.1-Beta", -1 )]
504508
[InlineData( "2013-08-06.1", "2013-08-06.1.0", 0 )]
505509
[InlineData( "2013-08-06.1.1", "2013-08-06.1.1", 0 )]
510+
[InlineData( "2013-08-06.1.1", "2013-08-06.1.1-Beta", 1 )]
511+
[InlineData( "2013-08-06.1.1-Beta", "2013-08-06.1.1", -1 )]
506512
[InlineData( "2013-08-06.2", "2013-08-06.1.1", 1 )]
507513
[InlineData( "2013-08-06.1", "2013-08-06.1.1", -1 )]
508514
[InlineData( "2013-08-06.1.1-Alpha", "2013-08-06.1.1-Alpha", 0 )]
@@ -527,6 +533,8 @@ public void api_version_comparisons_should_return_expected_result( string versio
527533
[InlineData( "2013-08-06", "2013-08-06", false )]
528534
[InlineData( "2013-08-07", "2013-08-06", false )]
529535
[InlineData( "2013-08-05", "2013-08-06", true )]
536+
[InlineData( "2013-08-06-Beta", "2013-08-06", true )]
537+
[InlineData( "2013-08-06", "2013-08-06-Beta", false )]
530538
[InlineData( "2013-08-06-Alpha", "2013-08-06-Alpha", false )]
531539
[InlineData( "2013-08-06-Beta", "2013-08-06-Alpha", false )]
532540
[InlineData( "2013-08-06-Alpha", "2013-08-06-Beta", true )]
@@ -535,6 +543,8 @@ public void api_version_comparisons_should_return_expected_result( string versio
535543
[InlineData( "1.1", "1.1", false )]
536544
[InlineData( "2.0", "1.1", false )]
537545
[InlineData( "1.1", "2.0", true )]
546+
[InlineData( "1.1-Alpha", "1.1", true )]
547+
[InlineData( "1.1", "1.1-Alpha", false )]
538548
[InlineData( "1-Alpha", "1-Alpha", false )]
539549
[InlineData( "1-Alpha", "1.0-Alpha", false )]
540550
[InlineData( "1.1-Alpha", "1.1-Alpha", false )]
@@ -545,6 +555,8 @@ public void api_version_comparisons_should_return_expected_result( string versio
545555
[InlineData( "2013-08-06.1.1", "2013-08-06.1.1", false )]
546556
[InlineData( "2013-08-06.2", "2013-08-06.1.1", false )]
547557
[InlineData( "2013-08-06.1", "2013-08-06.1.1", true )]
558+
[InlineData( "2013-08-06.1.1", "2013-08-06.1.1-RC", false )]
559+
[InlineData( "2013-08-06.1.1-RC", "2013-08-06.1.1", true )]
548560
[InlineData( "2013-08-06.1-Alpha", "2013-08-06.1-Alpha", false )]
549561
[InlineData( "2013-08-06.1-Alpha", "2013-08-06.1.0-Alpha", false )]
550562
[InlineData( "2013-08-06.1.1-Alpha", "2013-08-06.1.1-Alpha", false )]
@@ -571,6 +583,8 @@ public void api_version_1_lt_api_version_2_should_return_expected_result( string
571583
[InlineData( "2013-08-06", "2013-08-06", true )]
572584
[InlineData( "2013-08-07", "2013-08-06", false )]
573585
[InlineData( "2013-08-05", "2013-08-06", true )]
586+
[InlineData( "2013-08-06-RC", "2013-08-06", true )]
587+
[InlineData( "2013-08-06", "2013-08-06-RC", false )]
574588
[InlineData( "2013-08-06-Alpha", "2013-08-06-Alpha", true )]
575589
[InlineData( "2013-08-06-Beta", "2013-08-06-Alpha", false )]
576590
[InlineData( "2013-08-06-Alpha", "2013-08-06-Beta", true )]
@@ -579,6 +593,8 @@ public void api_version_1_lt_api_version_2_should_return_expected_result( string
579593
[InlineData( "1.1", "1.1", true )]
580594
[InlineData( "2.0", "1.1", false )]
581595
[InlineData( "1.1", "2.0", true )]
596+
[InlineData( "1.1-Alpha", "1.1", true )]
597+
[InlineData( "1.1", "1.1-Alpha", false )]
582598
[InlineData( "1-Alpha", "1-Alpha", true )]
583599
[InlineData( "1-Alpha", "1.0-Alpha", true )]
584600
[InlineData( "1.1-Alpha", "1.1-Alpha", true )]
@@ -589,6 +605,8 @@ public void api_version_1_lt_api_version_2_should_return_expected_result( string
589605
[InlineData( "2013-08-06.1.1", "2013-08-06.1.1", true )]
590606
[InlineData( "2013-08-06.2", "2013-08-06.1.1", false )]
591607
[InlineData( "2013-08-06.1", "2013-08-06.1.1", true )]
608+
[InlineData( "2013-08-06.1.1-RC", "2013-08-06.1.1", true )]
609+
[InlineData( "2013-08-06.1.1", "2013-08-06.1.1-RC", false )]
592610
[InlineData( "2013-08-06.1-Alpha", "2013-08-06.1-Alpha", true )]
593611
[InlineData( "2013-08-06.1-Alpha", "2013-08-06.1.0-Alpha", true )]
594612
[InlineData( "2013-08-06.1.1-Alpha", "2013-08-06.1.1-Alpha", true )]
@@ -615,6 +633,8 @@ public void api_version_1_le_api_version_2_should_return_expected_result( string
615633
[InlineData( "2013-08-06", "2013-08-06", false )]
616634
[InlineData( "2013-08-07", "2013-08-06", true )]
617635
[InlineData( "2013-08-05", "2013-08-06", false )]
636+
[InlineData( "2013-08-06", "2013-08-06-Alpha", true )]
637+
[InlineData( "2013-08-06-Alpha", "2013-08-06", false )]
618638
[InlineData( "2013-08-06-Alpha", "2013-08-06-Alpha", false )]
619639
[InlineData( "2013-08-06-Beta", "2013-08-06-Alpha", true )]
620640
[InlineData( "2013-08-06-Alpha", "2013-08-06-Beta", false )]
@@ -623,6 +643,8 @@ public void api_version_1_le_api_version_2_should_return_expected_result( string
623643
[InlineData( "1.1", "1.1", false )]
624644
[InlineData( "2.0", "1.1", true )]
625645
[InlineData( "1.1", "2.0", false )]
646+
[InlineData( "1.1", "1.1-Beta", true )]
647+
[InlineData( "1.1-Beta", "1.1", false )]
626648
[InlineData( "1-Alpha", "1-Alpha", false )]
627649
[InlineData( "1-Alpha", "1.0-Alpha", false )]
628650
[InlineData( "1.1-Alpha", "1.1-Alpha", false )]
@@ -633,6 +655,8 @@ public void api_version_1_le_api_version_2_should_return_expected_result( string
633655
[InlineData( "2013-08-06.1.1", "2013-08-06.1.1", false )]
634656
[InlineData( "2013-08-06.2", "2013-08-06.1.1", true )]
635657
[InlineData( "2013-08-06.1", "2013-08-06.1.1", false )]
658+
[InlineData( "2013-08-06.1.1", "2013-08-06.1.1-RC", true )]
659+
[InlineData( "2013-08-06.1.1-RC", "2013-08-06.1.1", false )]
636660
[InlineData( "2013-08-06.1-Alpha", "2013-08-06.1-Alpha", false )]
637661
[InlineData( "2013-08-06.1-Alpha", "2013-08-06.1.0-Alpha", false )]
638662
[InlineData( "2013-08-06.1.1-Alpha", "2013-08-06.1.1-Alpha", false )]
@@ -659,6 +683,8 @@ public void api_version_1_gt_api_version_2_should_return_expected_result( string
659683
[InlineData( "2013-08-06", "2013-08-06", true )]
660684
[InlineData( "2013-08-07", "2013-08-06", true )]
661685
[InlineData( "2013-08-05", "2013-08-06", false )]
686+
[InlineData( "2013-08-06", "2013-08-06-Alpha", true )]
687+
[InlineData( "2013-08-06-Alpha", "2013-08-06", false )]
662688
[InlineData( "2013-08-06-Alpha", "2013-08-06-Alpha", true )]
663689
[InlineData( "2013-08-06-Beta", "2013-08-06-Alpha", true )]
664690
[InlineData( "2013-08-06-Alpha", "2013-08-06-Beta", false )]
@@ -667,6 +693,8 @@ public void api_version_1_gt_api_version_2_should_return_expected_result( string
667693
[InlineData( "1.1", "1.1", true )]
668694
[InlineData( "2.0", "1.1", true )]
669695
[InlineData( "1.1", "2.0", false )]
696+
[InlineData( "1.1", "1.1-Beta", true )]
697+
[InlineData( "1.1-Beta", "1.1", false )]
670698
[InlineData( "1-Alpha", "1-Alpha", true )]
671699
[InlineData( "1-Alpha", "1.0-Alpha", true )]
672700
[InlineData( "1.1-Alpha", "1.1-Alpha", true )]
@@ -677,6 +705,8 @@ public void api_version_1_gt_api_version_2_should_return_expected_result( string
677705
[InlineData( "2013-08-06.1.1", "2013-08-06.1.1", true )]
678706
[InlineData( "2013-08-06.2", "2013-08-06.1.1", true )]
679707
[InlineData( "2013-08-06.1", "2013-08-06.1.1", false )]
708+
[InlineData( "2013-08-06.1.1", "2013-08-06.1.1-RC", true )]
709+
[InlineData( "2013-08-06.1.1-RC", "2013-08-06.1.1", false )]
680710
[InlineData( "2013-08-06.1-Alpha", "2013-08-06.1-Alpha", true )]
681711
[InlineData( "2013-08-06.1-Alpha", "2013-08-06.1.0-Alpha", true )]
682712
[InlineData( "2013-08-06.1.1-Alpha", "2013-08-06.1.1-Alpha", true )]

0 commit comments

Comments
 (0)