Skip to content

Commit 24386b7

Browse files
committed
Update to 7.5.4
- Sync with 7.5.4 - Fix ranges min_version, outside, simplify - Add tests
1 parent 511bd7c commit 24386b7

11 files changed

+276
-99
lines changed

src/classes/zcl_semver.clas.abap

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ CLASS zcl_semver IMPLEMENTATION.
397397
IF zcl_semver_utils=>is_numeric( prerelease[ i ] ).
398398
prerelease[ i ] += 1.
399399
prerelease[ i ] = condense( prerelease[ i ] ).
400-
i = 0.
400+
i = -2.
401401
ENDIF.
402402
i -= 1.
403403
ENDWHILE.
@@ -427,7 +427,9 @@ CLASS zcl_semver IMPLEMENTATION.
427427
prerelease = prerelease_tab.
428428
ENDIF.
429429
ENDIF.
430-
430+
WHEN 'prepush'.
431+
" Used by zcl_semver_ranges->min_version
432+
INSERT identifier_base INTO TABLE prerelease.
431433
WHEN OTHERS.
432434
zcx_semver_error=>raise( |Invalid increment argument { release }| ).
433435
ENDCASE.

src/classes/zcl_semver_range.clas.abap

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ CLASS zcl_semver_range IMPLEMENTATION.
255255

256256
" map the range to a 2d array of comparators
257257
LOOP AT ranges ASSIGNING FIELD-SYMBOL(<range>).
258-
INSERT parse_range( <range> ) INTO TABLE set.
258+
INSERT parse_range( zcl_semver_utils=>trim( <range> ) ) INTO TABLE set.
259259
ENDLOOP.
260260

261261
" throw out any comparator lists that are empty
@@ -285,10 +285,13 @@ CLASS zcl_semver_range IMPLEMENTATION.
285285
" if we have any that are *, then the range is just *
286286
LOOP AT set ASSIGNING <set>.
287287
IF lines( <set> ) = 1 AND is_any( <set>[ 1 ] ).
288-
set = VALUE #( ( <set> ) ).
288+
DATA(star) = <set>.
289289
EXIT.
290290
ENDIF.
291291
ENDLOOP.
292+
IF star IS NOT INITIAL.
293+
set = VALUE #( ( star ) ).
294+
ENDIF.
292295
ENDIF.
293296

294297
ENDIF.

src/cli/zcl_semver_cli.clas.testclasses.abap

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,10 +155,9 @@ CLASS ltcl_semver_cli IMPLEMENTATION.
155155
args = '1.2.3.4.5.6 -c'
156156
out = |1.2.3\n| ).
157157

158-
* TODO: rtl
159-
* test(
160-
* args = '1.2.3.4.5.6 -c --rtl'
161-
* out = |4.5.6\n| ).
158+
test(
159+
args = '1.2.3.4.5.6 -c --rtl'
160+
out = |4.5.6\n| ).
162161

163162
test(
164163
args = '1.2.3.4.5.6 -c --rtl --ltr'

src/functions/zcl_semver_functions.clas.abap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ CLASS zcl_semver_functions IMPLEMENTATION.
364364
<match>-offset = offset.
365365
<match>-length = strlen( |{ major }{ COND #( WHEN minor IS NOT INITIAL THEN '.' && minor ) }{ COND #( WHEN patch IS NOT INITIAL THEN '.' && patch ) }| ).
366366
<match>-endpos = <match>-offset + <match>-length.
367-
FIND '.' IN version+offset(*) MATCH OFFSET DATA(next_offset).
367+
FIND REGEX '^\d' IN version+offset(*) MATCH OFFSET DATA(next_offset).
368368
offset += next_offset + 1.
369369
IF offset >= strlen( version ).
370370
EXIT.

src/functions/zcl_semver_functions.clas.testclasses.abap

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ CLASS ltcl_semver_functions IMPLEMENTATION.
302302

303303
tests = VALUE #(
304304
( version = '1.2.3.4.5.6' res = '4.5.6' )
305-
" TODO: ( version = '1.2.3/a/b/c/2.3.4' res = '2.3.4' )
305+
( version = '1.2.3/a/b/c/2.3.4' res = '2.3.4' )
306306
( version = '1.2.3.4.5/6' res = '6.0.0' )
307307
( version = '1.2.3.4./6' res = '6.0.0' )
308308
( version = '1.2.3.4/6' res = '6.0.0' )
@@ -1167,6 +1167,20 @@ CLASS ltcl_semver_functions IMPLEMENTATION.
11671167
exp = '4.2.0-foo'
11681168
msg = 'looseness as an option' ).
11691169

1170+
DATA(mx) = zif_semver_constants=>max_safe_integer.
1171+
1172+
DATA(long_build) = '-928490632884417731e7af463c92b034d6a78268fc993bcb88a57944'.
1173+
DATA(short_version) = '1.1.1'.
1174+
DATA(long_version) = |{ mx }.{ mx }.{ mx }|.
1175+
1176+
cl_abap_unit_assert=>assert_equals(
1177+
act = zcl_semver_functions=>valid( short_version && long_build )
1178+
exp = short_version && long_build ).
1179+
1180+
cl_abap_unit_assert=>assert_equals(
1181+
act = zcl_semver_functions=>valid( long_version && long_build )
1182+
exp = long_version && long_build ).
1183+
11701184
ENDMETHOD.
11711185

11721186
ENDCLASS.

src/internal/zcl_semver_fixtures.clas.abap

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,9 @@ CLASS zcl_semver_fixtures IMPLEMENTATION.
547547
( range = '>=1.0.0 <1.1.0' version = '1.1.0' )
548548
( range = '>=1.0.0 <1.1.0' version = '1.1.0' incpre = abap_true )
549549
( range = '>=1.0.0 <1.1.0' version = '1.1.0-pre' )
550-
( range = '>=1.0.0 <1.1.0-pre' version = '1.1.0-pre' ) ).
550+
( range = '>=1.0.0 <1.1.0-pre' version = '1.1.0-pre' )
551+
552+
( range = '== 1.0.0 || foo' version = '2.0.0' loose = abap_true ) ).
551553

552554
ENDMETHOD.
553555

src/internal/zcl_semver_integration.clas.testclasses.abap

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,9 @@ CLASS ltcl_semver_integration IMPLEMENTATION.
4747
act = zcl_semver_ranges=>valid_range( r )
4848
exp = '1.2.3 <1.3.0' ).
4949

50-
51-
" TODO
52-
* cl_abap_unit_assert=>assert_equals(
53-
* act = zcl_semver_ranges=>min_version( r )->version
54-
* exp = '1.2.3' ).
50+
cl_abap_unit_assert=>assert_equals(
51+
act = zcl_semver_ranges=>min_version( r )->version
52+
exp = '1.2.3' ).
5553

5654
DATA(t) = VALUE string_table( ( `1.2.3` ) ).
5755

src/internal/zcl_semver_re.clas.abap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ CLASS zcl_semver_re IMPLEMENTATION.
403403

404404
DATA(safe_regex_replacements) = VALUE ty_regex_replacements(
405405
( token = `\s` max = 1 )
406-
( token = `\d` max = zif_semver_constants=>max_safe_component_length )
406+
( token = `\d` max = zif_semver_constants=>max_length )
407407
( token = letter_dash_number max = zif_semver_constants=>max_safe_build_length ) ).
408408

409409
result = value.

src/internal/zif_semver_constants.intf.abap

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ INTERFACE zif_semver_constants PUBLIC.
77
* ABAP Port by Marc Bernard <https://marcbernardtools.com/>
88
* SPDX-License-Identifier: ISC
99
************************************************************************
10-
* Based on node semver package v7.5.0 (April 2023)
11-
* https://github.com/npm/node-semver/releases/tag/v7.5.0
10+
* Based on node semver package v7.5.4 (July 2023)
11+
* https://github.com/npm/node-semver/releases/tag/v7.5.4
1212
************************************************************************
1313

1414
" Package version
15-
CONSTANTS version TYPE string VALUE '7.5.0' ##NEEDED.
15+
CONSTANTS version TYPE string VALUE '7.5.4' ##NEEDED.
1616

1717
" Note: this is the semver.org version of the spec that it implements
1818
" Not necessarily the package version of this code.

src/ranges/zcl_semver_ranges.clas.abap

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -255,19 +255,17 @@ CLASS zcl_semver_ranges IMPLEMENTATION.
255255
CASE <comparator>->operator.
256256
WHEN '>'.
257257
IF compver->prerelease IS INITIAL.
258-
" compver->patch++
259258
compver->inc( 'patch' ).
260259
ELSE.
261-
" compver.prerelease.push(0)
262-
compver->inc( release = 'prerelease' identifier = '0' ).
260+
compver->inc( release = 'prepush' identifier_base = '0' ).
263261
ENDIF.
264262

265-
IF setmin IS NOT INITIAL AND zcl_semver_functions=>gt( a = compver b = setmin ).
263+
IF setmin IS INITIAL OR zcl_semver_functions=>gt( a = compver b = setmin ).
266264
setmin = compver.
267265
ENDIF.
268266

269267
WHEN '' OR '>='.
270-
IF setmin IS NOT INITIAL AND zcl_semver_functions=>gt( a = compver b = setmin ).
268+
IF setmin IS INITIAL OR zcl_semver_functions=>gt( a = compver b = setmin ).
271269
setmin = compver.
272270
ENDIF.
273271

@@ -401,6 +399,7 @@ CLASS zcl_semver_ranges IMPLEMENTATION.
401399
DATA minmax TYPE ty_min_max.
402400
DATA set TYPE ty_set.
403401
DATA ranges TYPE string_table.
402+
DATA original TYPE string.
404403

405404
IF versions IS INITIAL.
406405
zcx_semver_error=>raise( 'Empty version list' ).
@@ -449,7 +448,14 @@ CLASS zcl_semver_ranges IMPLEMENTATION.
449448
ENDLOOP.
450449

451450
DATA(simplified) = concat_lines_of( table = ranges sep = ' || ' ).
452-
DATA(original) = semrange->to_string( ).
451+
452+
DATA(kind) = cl_abap_typedescr=>describe_by_data( range )->type_kind.
453+
454+
IF kind = cl_abap_typedescr=>typekind_char OR kind = cl_abap_typedescr=>typekind_string.
455+
original = range.
456+
ELSE.
457+
original = semrange->to_string( ).
458+
ENDIF.
453459

454460
IF strlen( simplified ) < strlen( original ).
455461
result = simplified.
@@ -497,7 +503,7 @@ CLASS zcl_semver_ranges IMPLEMENTATION.
497503
" - If no C has a prerelease and the LT.semver tuple, return false
498504
" - Else return true
499505

500-
* https://github.com/npm/node-semver/blob/main/ranges/subset.js
506+
" https://github.com/npm/node-semver/blob/main/ranges/subset.js
501507
zcx_semver_error=>raise( 'TODO' ).
502508

503509
ENDMETHOD.

0 commit comments

Comments
 (0)