From 8e5a1c19b591b29facf8027a4c770acaa243e98b Mon Sep 17 00:00:00 2001 From: knivey Date: Fri, 11 Jun 2021 02:46:27 -0700 Subject: [PATCH] Add ability to set values to options Also make options be case sensitive --- src/Args.php | 19 ++++++++++++++---- tests/ArgsTest.php | 48 ++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 6 deletions(-) diff --git a/src/Args.php b/src/Args.php index 8144448..d55d712 100644 --- a/src/Args.php +++ b/src/Args.php @@ -36,7 +36,6 @@ class Args implements \ArrayAccess, \Countable */ function __construct(public string $syntax, protected array $opts = []) { - $this->opts = array_map('\strtolower', $this->opts); $argv = array_filter(explode(' ', $syntax)); if (count($argv) == 0) { return; @@ -91,8 +90,14 @@ public function parse(string $msg) : Args { $msg = explode(' ', $msg); $msgb = []; foreach ($msg as $w) { - if(in_array($w, $this->opts)) - $this->parsedOpts[$w] = $w; + if(str_contains($w, "=")) { + list($lhs, $rhs) = explode("=", $w, 2); + } else { + $lhs = $w; + $rhs = null; + } + if(in_array($lhs, $this->opts)) + $this->parsedOpts[$lhs] = $rhs; else $msgb[] = $w; } @@ -123,7 +128,13 @@ public function getOpts() { } public function getOpt($name) : bool { - return isset($this->parsedOpts[strtolower($name)]); + return array_key_exists($name, $this->parsedOpts); + } + + public function getOptVal($name) { + if(!$this->getOpt($name)) + return false; + return $this->parsedOpts[$name]; } public function getArg(string $name): ?Arg { diff --git a/tests/ArgsTest.php b/tests/ArgsTest.php index 656af38..a3db171 100644 --- a/tests/ArgsTest.php +++ b/tests/ArgsTest.php @@ -265,7 +265,7 @@ function testOptions() $this->assertEmpty($args->getOpts()); $args->parse('moo --nes poo'); $this->assertEquals('moo poo', $args[0]); - $this->assertEquals(['--nes'=>'--nes'], $args->getOpts()); + $this->assertEquals(['--nes'=>null], $args->getOpts()); $args = new Args('', ['--nes']); $args->parse('moo boo poo'); @@ -273,7 +273,7 @@ function testOptions() $this->assertEmpty($args->getOpts()); $args->parse('moo --nes poo'); $this->assertEquals('moo', $args[0]); - $this->assertEquals(['--nes'=>'--nes'], $args->getOpts()); + $this->assertEquals(['--nes'=>null], $args->getOpts()); $args = new Args('[foo]', ['--nes']); $args->parse('moo boo poo'); @@ -293,4 +293,48 @@ function testOptions() $this->assertTrue($args->getOpt('--nes')); $this->assertTrue($args->getOpt('--bar')); } + + function testOptionsCase() + { + $args = new Args('', ['--nes', '--NES']); + $args->parse('--nes'); + $this->assertTrue($args->getOpt("--nes")); + $this->assertFalse($args->getOpt("--NES")); + + $args = new Args('', ['--nes', '--NES']); + $args->parse('--NES'); + $this->assertFalse($args->getOpt("--nes")); + $this->assertTrue($args->getOpt("--NES")); + } + + function testOptionsValue() + { + $args = new Args('', ['--nes', '--jam']); + $args = $args->parse('--nes'); + $this->assertTrue($args->getOpt("--nes")); + $this->assertEquals('', $args->getOptVal("--nes")); + $this->assertFalse($args->getOptVal("--jam")); + + $args = $args->parse('--nes=lol'); + $this->assertTrue($args->getOpt("--nes")); + $this->assertEquals("lol", $args->getOptVal("--nes")); + $this->assertFalse($args->getOpt("--jam")); + $this->assertFalse($args->getOptVal("--jam")); + + $args = $args->parse('--nes=LOL'); + $this->assertTrue($args->getOpt("--nes")); + $this->assertEquals("LOL", $args->getOptVal("--nes")); + $this->assertFalse($args->getOpt("--jam")); + $this->assertFalse($args->getOptVal("--jam")); + + $args = $args->parse('--nes=LOL --jam=yeah'); + $this->assertTrue($args->getOpt("--nes")); + $this->assertEquals("LOL", $args->getOptVal("--nes")); + $this->assertTrue($args->getOpt("--jam")); + $this->assertEquals("yeah", $args->getOptVal("--jam")); + + $args = $args->parse('--nes=0'); + $this->assertTrue($args->getOpt("--nes")); + $this->assertEquals("0", $args->getOptVal("--nes")); + } }