[["value", "value"]]], ["--mo12:", "args" => ["value", ["value"]]], ["--mo22:", "args" => ["value", "value"]], ]; const NORMALIZE_TESTS = [ [], ["--"], ["--"], ["--"], ["--", "--"], ["--", "--"], ["-aa"], ["-a", "-a", "--"], ["a", "b"], ["--", "a", "b"], ["-a", "--ma", "x", "a", "--ma=y", "b"], ["-a", "--mandatory", "x", "--mandatory", "y", "--", "a", "b"], ["-mx", "-m", "y"], ["-m", "x", "-m", "y", "--"], ["-ox", "-o", "y"], ["-ox", "-o", "--", "y"], ["-a", "--", "-a", "-c"], ["-a", "--", "-a", "-c"], # -a et -b doivent être considérés comme arguments, -n comme option ["--mo02"], ["--mo02", "--", "--"], ["--mo02", "-a"], ["--mo02", "-a", "--", "--"], ["--mo02", "--"], ["--mo02", "--", "--"], ["--mo02", "--", "-n"], ["--mo02", "--", "-n", "--"], ["--mo02", "--", "--", "-b"], ["--mo02", "--", "--", "-b"], # ["--mo02", "-a"], ["--mo02", "-a", "--", "--"], ["--mo02", "-a", "-a"], ["--mo02", "-a", "-a", "--"], ["--mo02", "-a", "--"], ["--mo02", "-a", "--", "--"], ["--mo02", "-a", "--", "-n"], ["--mo02", "-a", "--", "-n", "--"], ["--mo02", "-a", "--", "--", "-b"], ["--mo02", "-a", "--", "--", "-b"], [ "--mo02", "--", "--mo02", "x", "--", "--mo02", "x", "y", "--mo12", "x", "--", "--mo12", "x", "y", "--mo22", "x", "y", "z", ], [ "--mo02", "--", "--mo02", "x", "--", "--mo02", "x", "y", "--mo12", "x", "--", "--mo12", "x", "y", "--mo22", "x", "y", "--", "z", ], ]; function testNormalize() { $parser = new SimpleArgsParser(self::NORMALIZE_ARGS); $count = count(self::NORMALIZE_TESTS); for ($i = 0; $i < $count; $i += 2) { $args = self::NORMALIZE_TESTS[$i]; $expected = self::NORMALIZE_TESTS[$i + 1]; $normalized = $parser->normalize($args); self::assertSame($expected, $normalized , "for ".var_export($args, true) .", normalized is ".var_export($normalized, true) ); } } function testArgsNone() { $parser = new SimpleArgsParser([ ["-z"], ["-a"], ["-b"], ["-c",], ["-d", "value" => 42], ]); $dest = []; $parser->parse($dest, ["-a", "-bb", "-ccc", "-dddd"]); self::assertSame(null, $dest["z"] ?? null); self::assertSame(1, $dest["a"] ?? null); self::assertSame(2, $dest["b"] ?? null); self::assertSame(3, $dest["c"] ?? null); self::assertSame(42, $dest["d"] ?? null); self::assertTrue(true); } function testArgsMandatory() { $parser = new SimpleArgsParser([ ["-z:"], ["-a:"], ["-b:"], ["-c:", "value" => 42], ]); $dest = []; $parser->parse($dest, [ "-a", "-bb", "-c", "-c15", "-c30", "-c45", ]); self::assertSame(null, $dest["z"] ?? null); self::assertSame("-bb", $dest["a"] ?? null); self::assertSame(null, $dest["b"] ?? null); self::assertSame("45", $dest["c"] ?? null); self::assertTrue(true); } function testArgsOptional() { $parser = new SimpleArgsParser([ ["-z::"], ["-a::"], ["-b::"], ["-c::", "value" => 42], ["-d::", "value" => 42], ]); $dest = []; $parser->parse($dest, [ "-a", "-bb", "-c", "-d15", "-d30", ]); self::assertSame(null, $dest["z"] ?? null); self::assertSame(null, $dest["a"] ?? null); self::assertSame("b", $dest["b"] ?? null); self::assertSame(42, $dest["c"] ?? null); self::assertSame("30", $dest["d"] ?? null); self::assertTrue(true); } function testRemains() { $parser = new SimpleArgsParser([]); $dest = []; $parser->parse($dest, ["x", "y"]); self::assertSame(["x", "y"], $dest["args"] ?? null); } function test() { $parser = new SimpleArgsParser([ ["-n", "--none"], ["-m:", "--mandatory"], ["-o::", "--optional"], ["--mo02:", "args" => [["value", "value"]]], ["--mo12:", "args" => ["value", ["value"]]], ["--mo22:", "args" => ["value", "value"]], ]); $parser->parse($dest, [ "--mo02", "--", "--mo02", "x", "--", "--mo02", "x", "y", "--mo12", "x", "--", "--mo12", "x", "y", "--mo22", "x", "y", "z", ]); self::assertTrue(true); } }