Main.php

<?php

namespace Taeluf\Provi\Test;

class Main extends \Tlf\Tester {


    public function testGetDefaultBranch(){
        echo 'not implemented yet';
    }

    /**
     * @test parsing a url 
     */
    public function testParseUrl(){
        $projects_dir = $this->file('test/Server/projects/');
        // when a page is requested, let's say, the home page
        // i need to know very little - the home page has very specific handling
        //
        // A project home page requires me to know:
            // the project directory
            // the branch (default or explicit)
            // view source or view docs 
            // the file to view (README.md, generally)
        // A url like /docs/Provi/some-file.md requires me to know:
            // the project directory
            // the branch
            // view source or view docs
            // the file to view (within the project's branch dir)

        $provi = new \Tlf\Provi2($projects_dir, '/docs/', 'Taeluf');


        $this->test('Not Provi Request: /');
        $parsed = $provi->parse_url2('/');
        $this->compare(false, $parsed);

        $this->test("Project Listing: /docs/");
        $parsed = $provi->parse_url2('/docs/');
        $this->compare_arrays(
            ['prefix'=>'/docs/',
            'project_url'=>'',
            'branch'=>'',
            'project_name'=>'',
            'type'=>'project_listing', // docs, src, or project_list
            'branch_dir'=>'',
            'docs_dir'=>'',
            'rel_file_path'=>'',
            'rel_dir_path'=>'',
            'abs_file_path'=>'',
            'abs_dir_path'=>'',
            ],
            (array)$parsed
        );
        
        $this->test("File, default branch: /docs/Provi/temp2.md");
        $parsed = $provi->parse_url2('/docs/Provi/temp2.md');
        $this->compare_arrays(
            ['prefix'=>'/docs/',
            'project_url'=>'/docs/Provi/',
            'branch'=>'v0.9',
            'project_name'=>'Provi',
            'type'=>'docs', // docs, src, or project_list
            'branch_dir'=>$projects_dir.'Provi/v0.9/',
            'docs_dir'=>$projects_dir.'Provi/v0.9/doc/',
            'rel_file_path'=>'temp2.md',
            'rel_dir_path'=>'/',
            'abs_file_path'=>$projects_dir.'Provi/v0.9/doc/temp2.md',
            'abs_dir_path'=>$projects_dir.'Provi/v0.9/doc/',
            ],
            (array)$parsed
        );

        $this->test('Project home page: /docs/Provi/');
        $parsed = $provi->parse_url2('/docs/Provi/');
        $this->compare_arrays(
            ['prefix'=>'/docs/',
            'project_url'=>'/docs/Provi/',
            'branch'=>'v0.9',
            'project_name'=>'Provi',
            'type'=>'docs', // docs, src, or project_list
            'branch_dir'=>$projects_dir.'Provi/v0.9/',
            'docs_dir'=>$projects_dir.'Provi/v0.9/doc/',
            'rel_file_path'=>'README.md',
            'rel_dir_path'=>'/',
            'abs_file_path'=>$projects_dir.'Provi/v0.9/doc/README.md',
            'abs_dir_path'=>$projects_dir.'Provi/v0.9/doc/',
            ],
            (array)$parsed
        );

        $this->test('Project Source Home Page: /docs/Provi-src/');
        $parsed = $provi->parse_url2('/docs/Provi-src/');
        $this->compare_arrays(
            ['prefix'=>'/docs/',
            'project_url'=>'/docs/Provi-src/',
            'branch'=>'v0.9',
            'project_name'=>'Provi',
            'type'=>'src', // docs, src, or project_list
            'branch_dir'=>$projects_dir.'Provi/v0.9/',
            'docs_dir'=>$projects_dir.'Provi/v0.9/doc/',
            'rel_file_path'=>'README.md',
            'rel_dir_path'=>'/',
            'abs_file_path'=>$projects_dir.'Provi/v0.9/README.md',
            'abs_dir_path'=>$projects_dir.'Provi/v0.9/',
            ],
            (array)$parsed
        );

        $this->test('Project home page, branch v0.8: /docs/Provi:v0.8/');
        $parsed = $provi->parse_url2('/docs/Provi:v0.8/');
        $this->compare_arrays(
            ['prefix'=>'/docs/',
            'project_url'=>'/docs/Provi:v0.8/',
            'branch'=>'v0.8',
            'project_name'=>'Provi',
            'type'=>'docs', // docs, src, or project_list
            'branch_dir'=>$projects_dir.'Provi/v0.8/',
            'docs_dir'=>$projects_dir.'Provi/v0.8/doc/',
            'rel_file_path'=>'README.md',
            'rel_dir_path'=>'/',
            'abs_file_path'=>$projects_dir.'Provi/v0.8/doc/README.md',
            'abs_dir_path'=>$projects_dir.'Provi/v0.8/doc/',
            ],
            (array)$parsed
        );

        $this->test('Project Source Home Page, branch v0.8: /docs/Provi-src:v0.8/');
        $parsed = $provi->parse_url2('/docs/Provi-src:v0.8/');
        $this->compare_arrays(
            ['prefix'=>'/docs/',
            'project_url'=>'/docs/Provi-src:v0.8/',
            'branch'=>'v0.8',
            'project_name'=>'Provi',
            'type'=>'src', // docs, src, or project_list
            'branch_dir'=>$projects_dir.'Provi/v0.8/',
            'docs_dir'=>$projects_dir.'Provi/v0.8/doc/',
            'rel_file_path'=>'README.md',
            'rel_dir_path'=>'/',
            'abs_file_path'=>$projects_dir.'Provi/v0.8/README.md',
            'abs_dir_path'=>$projects_dir.'Provi/v0.8/',
            ],
            (array)$parsed
        );

        $this->test('Source File: /docs/Provi-src/code/class/Provi.php');
        $parsed = $provi->parse_url2('/docs/Provi-src/code/class/Provi.php');
        $this->compare_arrays(
            ['prefix'=>'/docs/',
            'project_url'=>'/docs/Provi-src/',
            'branch'=>'v0.9',
            'project_name'=>'Provi',
            'type'=>'src', // docs, src, or project_list
            'branch_dir'=>$projects_dir.'Provi/v0.9/',
            'docs_dir'=>$projects_dir.'Provi/v0.9/doc/',
            'rel_file_path'=>'code/class/Provi.php',
            'rel_dir_path'=>'code/class/',
            'abs_file_path'=>$projects_dir.'Provi/v0.9/code/class/Provi.php',
            'abs_dir_path'=>$projects_dir.'Provi/v0.9/code/class/',
            ],
            (array)$parsed
        );
    }
}