@@ -48,6 +48,51 @@ function get_comparable_java_version() {
4848}
4949
5050
51+ # function 'is_valid_requirement_pattern()'
52+ #
53+ # check whether the Java requirement is a valid requirement pattern
54+ #
55+ # supported requirements are for example:
56+ # - 1.6 requires Java 6 (any update) [1.6, 1.6.0_45, 1.6.0_88]
57+ # - 1.6* requires Java 6 (any update) [1.6, 1.6.0_45, 1.6.0_88]
58+ # - 1.6+ requires Java 6 or higher [1.6, 1.6.0_45, 1.8, 9, etc.]
59+ # - 1.6.0 requires Java 6 (any update) [1.6, 1.6.0_45, 1.6.0_88]
60+ # - 1.6.0_45 requires Java 6u45 [1.6.0_45]
61+ # - 1.6.0_45+ requires Java 6u45 or higher [1.6.0_45, 1.6.0_88, 1.8, etc.]
62+ # - 9 requires Java 9 (any update) [9.0.*, 9.1, 9.3, etc.]
63+ # - 9* requires Java 9 (any update) [9.0.*, 9.1, 9.3, etc.]
64+ # - 9+ requires Java 9 or higher [9.0, 9.1, 10, etc.]
65+ # - 9.1 requires Java 9.1 (any update) [9.1.*, 9.1.2, 9.1.13, etc.]
66+ # - 9.1* requires Java 9.1 (any update) [9.1.*, 9.1.2, 9.1.13, etc.]
67+ # - 9.1+ requires Java 9.1 or higher [9.1, 9.2, 10, etc.]
68+ # - 9.1.3 requires Java 9.1.3 [9.1.3]
69+ # - 9.1.3* requires Java 9.1.3 (any update) [9.1.3]
70+ # - 9.1.3+ requires Java 9.1.3 or higher [9.1.3, 9.1.4, 9.2.*, 10, etc.]
71+ # - 10-ea requires Java 10 (early access release)
72+ #
73+ # unsupported requirement patterns are for example:
74+ # - 1.2, 1.3, 1.9 Java 2, 3 are not supported
75+ # - 1.9 Java 9 introduced a new versioning scheme
76+ # - 6u45 known versioning syntax, but unsupported
77+ # - 9-ea*, 9-ea+ early access releases paired with */+
78+ # - 9., 9.*, 9.+ version ending with a .
79+ # - 9.1., 9.1.*, 9.1.+ version ending with a .
80+ # - 9.3.5.6 4 part version number is unsupported
81+ #
82+ # @param1 a Java requirement string ('1.8+')
83+ # @return boolean exit code: 0 (is valid), 1 (is not valid)
84+ # ###############################################################################
85+ function is_valid_requirement_pattern() {
86+ local java_req=$1
87+ # first test matches old Java versioning scheme (up to 1.8), second test matches new scheme (starting with 9)
88+ if [[ ${java_req} =~ ^1\. [4-8](\. 0)? (\. 0_[0-9]+)? [* +]? $ ]] || [[ ${java_req} =~ ^(9| 1[0-9])(-ea| [* +]| (\. [0-9]+){1,2}[* +]? )? $ ]]; then
89+ return 0
90+ else
91+ return 1
92+ fi
93+ }
94+
95+
5196# function 'does_java_version_satisfy_requirement()'
5297#
5398# this function checks whether a given java version number
@@ -232,6 +277,106 @@ testComparable "10.10.23" "10010023"
232277testComparable " 10.10.113" " 10010113"
233278
234279
280+
281+ # test function:
282+ # tests the is_valid_requirement_pattern() function
283+ # #########################################################
284+ function testValidReqPattern() {
285+ local pattern=$1
286+ local expected=$2
287+ local actual=$( is_valid_requirement_pattern " $pattern " ; echo $? )
288+ if [ " $expected " == " $actual " ] ; then
289+ case $expected in
290+ 0)
291+ echo " [TEST OK] [${expected} ==${actual} ] Requirement pattern '$pattern ' is valid"
292+ ;;
293+ 1)
294+ echo " [TEST OK] [${expected} ==${actual} ] Requirement pattern '$pattern ' is not valid"
295+ ;;
296+ esac
297+ else
298+ echo " [TEST FAILED] [${expected} !=${actual} ] Requirement ${pattern} ; Expected: ${expected} ; Actual: ${actual} "
299+ fi
300+ }
301+
302+
303+ echo " "
304+ echo " "
305+ echo " ########################################################"
306+ echo " Testing function is_valid_requirement_pattern()"
307+ echo " "
308+ echo " Tests with old version scheme (valid requirements):"
309+ testValidReqPattern " 1.4" " 0"
310+ testValidReqPattern " 1.5" " 0"
311+ testValidReqPattern " 1.6" " 0"
312+ testValidReqPattern " 1.6*" " 0"
313+ testValidReqPattern " 1.6+" " 0"
314+ testValidReqPattern " 1.6.0" " 0"
315+ testValidReqPattern " 1.6.0*" " 0"
316+ testValidReqPattern " 1.6.0+" " 0"
317+ testValidReqPattern " 1.6.0_45" " 0"
318+ testValidReqPattern " 1.6.0_45+" " 0"
319+ testValidReqPattern " 1.6.0_100" " 0"
320+ testValidReqPattern " 1.6.0_100+" " 0"
321+ echo " "
322+ echo " Tests with old version scheme (invalid requirements):"
323+ testValidReqPattern " 1.2" " 1"
324+ testValidReqPattern " 1.3" " 1"
325+ testValidReqPattern " 1.9" " 1"
326+ testValidReqPattern " 1.9*" " 1"
327+ testValidReqPattern " 1.9+" " 1"
328+ testValidReqPattern " 1.9.0_20" " 1"
329+ testValidReqPattern " 1.9.0_20*" " 1"
330+ testValidReqPattern " 1.9.0_20+" " 1"
331+ testValidReqPattern " 6u45" " 1"
332+ echo " "
333+ echo " Tests with new version scheme (valid requirements):"
334+ testValidReqPattern " 9" " 0"
335+ testValidReqPattern " 9*" " 0"
336+ testValidReqPattern " 9+" " 0"
337+ testValidReqPattern " 9-ea" " 0"
338+ testValidReqPattern " 9.1" " 0"
339+ testValidReqPattern " 9.1*" " 0"
340+ testValidReqPattern " 9.1+" " 0"
341+ testValidReqPattern " 9.1.3" " 0"
342+ testValidReqPattern " 9.1.3*" " 0"
343+ testValidReqPattern " 9.1.3+" " 0"
344+ testValidReqPattern " 9.0.13" " 0"
345+ testValidReqPattern " 9.11" " 0"
346+ testValidReqPattern " 9.11*" " 0"
347+ testValidReqPattern " 9.11+" " 0"
348+ testValidReqPattern " 9.10.23" " 0"
349+ testValidReqPattern " 9.10.101" " 0"
350+ testValidReqPattern " 10" " 0"
351+ testValidReqPattern " 10*" " 0"
352+ testValidReqPattern " 10-ea" " 0"
353+ testValidReqPattern " 10.1" " 0"
354+ testValidReqPattern " 10.1*" " 0"
355+ testValidReqPattern " 10.1+" " 0"
356+ testValidReqPattern " 10.0.1" " 0"
357+ testValidReqPattern " 10.0.1*" " 0"
358+ testValidReqPattern " 10.0.1+" " 0"
359+ testValidReqPattern " 10.0.13" " 0"
360+ testValidReqPattern " 10.1.3" " 0"
361+ testValidReqPattern " 10.12" " 0"
362+ testValidReqPattern " 10.10.23" " 0"
363+ testValidReqPattern " 10.10.113" " 0"
364+ echo " "
365+ echo " Tests with new version scheme (invalid requirements):"
366+ testValidReqPattern " 9-ea*" " 1"
367+ testValidReqPattern " 9-ea+" " 1"
368+ testValidReqPattern " 9." " 1"
369+ testValidReqPattern " 9.*" " 1"
370+ testValidReqPattern " 9.+" " 1"
371+ testValidReqPattern " 9.1." " 1"
372+ testValidReqPattern " 9.1.*" " 1"
373+ testValidReqPattern " 9.1.+" " 1"
374+ testValidReqPattern " 9.2.15." " 1"
375+ testValidReqPattern " 9.2.15.*" " 1"
376+ testValidReqPattern " 9.2.15.+" " 1"
377+ testValidReqPattern " 9.3.5.6" " 1"
378+
379+
235380# test function:
236381# tests the does_java_version_satisfy_requirement() function
237382# #########################################################
0 commit comments