From d1f16e06ff2728310a0c152b6f088c5a708226e0 Mon Sep 17 00:00:00 2001 From: Valandi Date: Thu, 13 Aug 2026 11:12:17 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20split=20-ac=20Level:Version=20values=20m?= =?UTF-8?q?anually=20=E2=80=94=20commons-cli=201.6.0=20drops=20the=20':'?= =?UTF-8?q?=20separator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commons-cli 1.6.0 ignores valueSeparator(':') on options built with optionalArg(true), so "-ac AA:WCAG_2_1" reached EyesFactory.accSettings as one unsplit token and failed AccessibilityLevel parsing. Broken for every Level:Version invocation (CLI and GUI) since the repo import. Split a lone colon-bearing token in accSettings itself: covers both the CLI and GUI paths, keeps bare -ac working, and stays correct if a later commons-cli fixes the upstream regression. Regression tests include one through the real parse chain (getOptions -> DefaultParser -> accSettings). Co-Authored-By: Claude Fable 5 --- .../imagetester/lib/EyesFactory.java | 4 ++++ .../imagetester/EyesFactoryTest.java | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/main/java/com/applitools/imagetester/lib/EyesFactory.java b/src/main/java/com/applitools/imagetester/lib/EyesFactory.java index dfabda1..705c187 100644 --- a/src/main/java/com/applitools/imagetester/lib/EyesFactory.java +++ b/src/main/java/com/applitools/imagetester/lib/EyesFactory.java @@ -225,6 +225,10 @@ public EyesFactory imageCut(String[] cutArgs) { public EyesFactory accSettings(String[] settings) { if (settings == null) return this; + // commons-cli 1.6.0 ignores valueSeparator(':') on options with optionalArg(true), + // so "-ac AA:WCAG_2_1" arrives here as one unsplit token — split it ourselves. + if (settings.length == 1 && settings[0].contains(":")) + settings = settings[0].split(":", 2); AccessibilityLevel level = AccessibilityLevel.AA; AccessibilityGuidelinesVersion version = AccessibilityGuidelinesVersion.WCAG_2_0; if (settings.length > 2) diff --git a/src/test/java/com/applitools/imagetester/EyesFactoryTest.java b/src/test/java/com/applitools/imagetester/EyesFactoryTest.java index 539eefd..dae7012 100644 --- a/src/test/java/com/applitools/imagetester/EyesFactoryTest.java +++ b/src/test/java/com/applitools/imagetester/EyesFactoryTest.java @@ -2,6 +2,8 @@ import com.applitools.imagetester.lib.EyesFactory; import com.applitools.imagetester.lib.Logger; +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.DefaultParser; import org.junit.Test; import static org.junit.Assert.*; @@ -64,6 +66,26 @@ public void accSettings_null_isNoOp() { assertNotNull(factory); } + @Test + public void accSettings_combinedLevelColonVersionToken_enablesValidation() { + EyesFactory factory = createFactory().accSettings(new String[]{"AA:WCAG_2_1"}); + assertTrue(factory.hasAccessibilityValidation()); + } + + @Test + public void accSettings_combinedTokenWithBlankLevel_enablesValidation() { + EyesFactory factory = createFactory().accSettings(new String[]{":WCAG_2_1"}); + assertTrue(factory.hasAccessibilityValidation()); + } + + @Test + public void accSettings_cliParsedColonSeparatedValue_enablesValidation() throws Exception { + CommandLine cmd = new DefaultParser().parse(ImageTester.getOptions(), + new String[]{"-ac", "AA:WCAG_2_1"}); + EyesFactory factory = createFactory().accSettings(cmd.getOptionValues("ac")); + assertTrue(factory.hasAccessibilityValidation()); + } + @Test(expected = IllegalArgumentException.class) public void accSettings_moreThanTwoValues_throws() { createFactory().accSettings(new String[]{"AA", "WCAG_2_1", "extra"});