@@ -632,4 +632,113 @@ private Stream<String> uuidVersionStringStream() {
632632 "f95e94f7-2443-4b2f-a10d-059d8d224dd9" ,
633633 "b558af80-78bc-43c7-b916-d635a23cc4b5" );
634634 }
635+
636+ private void checkVersionsOrder (String [] versions ) {
637+ assertSequence (versions );
638+ }
639+
640+ private void checkVersionsEqual (String v1 , String v2 ) {
641+ assertOrder (X_EQ_Y , v1 , v2 );
642+ }
643+
644+ private void checkVersionsHaveSameOrder (String v1 , String v2 ) {
645+ assertOrder (X_EQ_Y , v1 , v2 );
646+ }
647+
648+ private void checkVersionsOrder (String v1 , String v2 ) {
649+ assertOrder (X_LT_Y , v1 , v2 );
650+ }
651+
652+ /**
653+ * Test <a href="https://issues.apache.org/jira/browse/MNG-5568">MNG-5568</a> edge case
654+ * which was showing transitive inconsistency: since A > B and B > C then we should have A > C
655+ * otherwise sorting a list of ComparableVersions() will in some cases throw runtime exception;
656+ * see Netbeans issues <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=240845">240845</a> and
657+ * <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=226100">226100</a>
658+ */
659+ @ Test
660+ void testMng5568 () {
661+ checkVersionsOrder ("6.1.0rc3" , "6.1H.5-beta" );
662+ checkVersionsOrder ("6.1.0rc3" , "6.1.0" ); // classical
663+ checkVersionsOrder ("6.1.0" , "6.1H.5-beta" ); // transitivity
664+ }
665+
666+ /**
667+ * Test <a href="https://jira.apache.org/jira/browse/MNG-6572">MNG-6572</a> optimization.
668+ */
669+ @ Test
670+ void testMng6572 () {
671+ String a = "20190126.230843" ; // resembles a SNAPSHOT
672+ String b = "1234567890.12345" ; // 10 digit number
673+ String c = "123456789012345.1H.5-beta" ; // 15 digit number
674+ String d = "12345678901234567890.1H.5-beta" ; // 20 digit number
675+
676+ checkVersionsOrder (a , b );
677+ checkVersionsOrder (b , c );
678+ checkVersionsOrder (a , c );
679+ checkVersionsOrder (c , d );
680+ checkVersionsOrder (b , d );
681+ checkVersionsOrder (a , d );
682+ }
683+
684+ /**
685+ * Test <a href="https://issues.apache.org/jira/browse/MNG-6964">MNG-6964</a> edge cases
686+ * for qualifiers that start with "-0.", which was showing A == C and B == C but A < B.
687+ */
688+ @ Test
689+ void testMng6964 () {
690+ String a = "1-0.alpha" ;
691+ String b = "1-0.beta" ;
692+ String c = "1" ;
693+
694+ checkVersionsOrder (a , c ); // Now a < c, but before MNG-6964 they were equal
695+ checkVersionsOrder (b , c ); // Now b < c, but before MNG-6964 they were equal
696+ checkVersionsOrder (a , b ); // Should still be true
697+ }
698+
699+ /**
700+ * Test <a href="https://issues.apache.org/jira/browse/MNG-7559">MNG-7559</a> edge cases
701+ * -pfd < final, ga, release
702+ * 2.0.1.MR < 2.0.1
703+ * 9.4.1.jre16 > 9.4.1.jre16-preview
704+ */
705+ @ Test
706+ void testMng7559 () {
707+ // checking general cases
708+ // checkVersionsOrder(new String[] {"ab", "alpha", "beta", "cd", "ea", "milestone", "pfd", "preview", "RC"});
709+ // checking identified issues respect the general case
710+ // checkVersionsOrder("2.3-pfd", "2.3");
711+ // checkVersionsOrder("2.0.1.MR", "2.0.1");
712+ checkVersionsOrder ("9.4.1.jre16-preview" , "9.4.1.jre16" );
713+ checkVersionsOrder ("1-ga-1" , "1-sp-1" );
714+ }
715+
716+ /**
717+ * Test <a href="https://issues.apache.org/jira/browse/MNG-7644">MNG-7644</a> edge cases
718+ * 1.0.0.RC1 < 1.0.0-RC2 and more generally:
719+ * 1.0.0.X1 < 1.0.0-X2 for any string X
720+ */
721+ @ Test
722+ void testMng7644 () {
723+ for (String x : new String [] {"abc" , "alpha" , "a" , "beta" , "b" , "def" , "m" , "preview" , "RC" }) {
724+ // 1.0.0.X1 < 1.0.0-X2 for any string x
725+ checkVersionsOrder ("1.0.0." + x + "1" , "1.0.0-" + x + "2" );
726+ // 2.0.X1 == 2-X1 == 2.0.0.X1 for any string x
727+ checkVersionsEqual ("2-" + x + "1" , "2.0." + x + "1" ); // previously ordered, now equals
728+ checkVersionsEqual ("2-" + x + "1" , "2.0.0." + x + "1" ); // previously ordered, now equals
729+ checkVersionsEqual ("2.0." + x + "1" , "2.0.0." + x + "1" ); // previously ordered, now equals
730+ }
731+ }
732+
733+ @ Test
734+ public void testMng7714 () {
735+ String f = ("1.0.final-redhat" );
736+ String sp1 = ("1.0-sp1-redhat" );
737+ String sp2 = ("1.0-sp-1-redhat" );
738+ String sp3 = ("1.0-sp.1-redhat" );
739+ assertOrder (X_LT_Y , f , sp1 );
740+ assertOrder (X_LT_Y , f , sp2 );
741+ assertOrder (X_LT_Y , f , sp3 );
742+ }
743+
635744}
0 commit comments