-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun_integrated_test.php
More file actions
executable file
·96 lines (74 loc) · 2.18 KB
/
run_integrated_test.php
File metadata and controls
executable file
·96 lines (74 loc) · 2.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/bin/env php
<?php
use Mohachi\CliParser\IdTokenizer\LiteralIdTokenizer;
use Mohachi\CliParser\IdTokenizer\LongIdTokenizer;
use Mohachi\CliParser\IdTokenizer\ShortIdTokenizer;
use Mohachi\CliParser\Lexer;
use Mohachi\CliParser\Command;
use Mohachi\CliParser\Option;
use PHPUnit\Framework\TestCase;
require_once __DIR__ . "/vendor/autoload.php";
/* Filteration */
$files = [];
$filters = array_slice($argv, 1);
$dir = __DIR__ . "/tests/integration";
if( empty($filters) )
{
$filters[] = "*";
}
foreach( $filters as $filter )
{
$files = array_merge($files, glob($dir ."/". trim($filter, "/")));
}
array_unique($files);
foreach( $files as $file )
{
include_once $file;
/* Automation */
$tokenizers = [
"long" => new LongIdTokenizer,
"short" => new ShortIdTokenizer,
"literal" => new LiteralIdTokenizer,
];
$lexer = new Lexer;
$cmd["parser"] = new Command($cmd["name"]);
foreach( $cmd["ids"] as $type => $id )
{
$cmd["parser"]->id($id);
$tokenizers[$type]->append($id);
}
foreach( $cmd["options"] as $name => $option )
{
$parser = new Option($name);
foreach( $option["ids"] as $type => $id )
{
$parser->id($id);
$tokenizers[$type]->append($id);
}
if( isset($option["arguments"]) )
{
foreach( $option["arguments"] as $name => $criterion )
{
$parser->arg($name, $criterion);
}
}
$cmd["parser"]->opt($parser);
}
foreach( $cmd["arguments"] as $name => $criterion )
{
$cmd["parser"]->arg($name, $criterion);
}
foreach( $tokenizers as $name => $tokenizer )
{
$lexer->append($name, $tokenizer);
}
/* Run tests */
foreach( $examples as $i => $example )
{
$queue = $lexer->lex($example["line"]);
TestCase::assertEquals($example["expected"]["queue"], $queue);
$syntax = $cmd["parser"]->parse($queue);
TestCase::assertEquals($example["expected"]["syntax"], $syntax);
}
echo "[\e[32mSuccess\e[0m] \e[33m$file\e[0m", PHP_EOL;
}