WordPress.org

Make WordPress Core

Ticket #10082: shortcode-tests.php

File shortcode-tests.php, 2.8 KB (added by Denis-de-Bernardy, 5 years ago)
Line 
1<?php
2function test_regexp($match) {
3        $return = array_shift($match);
4        #echo "\n";
5        #var_export($match);
6        #echo "\n";
7        $begin = array_shift($match);
8        $end = array_pop($match);
9        #echo "\n";
10        #var_export($match);
11        #echo "\n";
12        if ( $begin == '[' && $end == ']' ) {
13                return substr($return, 1, strlen($return) - 2);
14        } else {
15                $content = array_pop($match);
16                $tag = array_shift($match);
17                $attr = array_shift($match);
18                #var_dump($begin, $end);
19                if ( $content ) {
20                        return $begin . '{' . $tag . $attr . '}' . $content . '{/' . $tag . '}' . $end;
21                } else {
22                        return $begin . '{' . $tag . $attr . '/}' . $end;
23                }
24        }
25}
26
27$tests = array(
28        '[foo]bar[/foo]' => '{foo}bar{/foo}',
29        '[foo/]bar[/foo]' => '{foo/}bar[/foo]',
30        '[foo/]bar' => '{foo/}bar',
31        '[foo]bar' => '{foo/}bar',
32        '[foo attr]bar[/foo]' => '{foo attr}bar{/foo}',
33        '[foo attr/]bar[/foo]' => '{foo attr/}bar[/foo]',
34        '[foo attr/]bar' => '{foo attr/}bar',
35        '[foo attr]bar' => '{foo attr/}bar',
36        '[[foo]bar[/foo]' => '[{foo}bar{/foo}',
37        '[[foo/]bar[/foo]' => '[{foo/}bar[/foo]',
38        '[[foo/]bar' => '[{foo/}bar',
39        '[[foo]bar' => '[{foo/}bar',
40        '[[foo attr]bar[/foo]' => '[{foo attr}bar{/foo}',
41        '[[foo attr/]bar[/foo]' => '[{foo attr/}bar[/foo]',
42        '[[foo attr/]bar' => '[{foo attr/}bar',
43        '[[foo attr]bar' => '[{foo attr/}bar',
44        '[foo]bar[/foo]]' => '{foo}bar{/foo}]',
45        '[foo/]]bar[/foo]' => '{foo/}]bar[/foo]',
46        '[foo/]bar]' => '{foo/}bar]',
47        '[foo]]bar' => '{foo/}]bar',
48        '[foo attr]bar[/foo]]' => '{foo attr}bar{/foo}]',
49        '[foo attr/]]bar[/foo]' => '{foo attr/}]bar[/foo]',
50        '[foo attr/]bar]' => '{foo attr/}bar]',
51        '[foo attr]]bar' => '{foo attr/}]bar',
52        '[[foo]bar[/foo]]' => '[foo]bar[/foo]',
53        '[[foo/]]bar[/foo]' => '[foo/]bar[/foo]',
54        '[[foo/]]bar' => '[foo/]bar',
55        '[[foo]]bar' => '[foo]bar',
56        '[[foo attr]bar[/foo]]' => '[foo attr]bar[/foo]',
57        '[[foo attr/]]bar[/foo]' => '[foo attr/]bar[/foo]',
58        '[[foo attr/]]bar' => '[foo attr/]bar',
59        '[[foo attr]]bar' => '[foo attr]bar',
60        );
61
62$extras = array_merge(array('' => '', "\n" => "\n", " " => " ", " \n " => " \n "), $tests);
63
64$regexes = array(
65        '/(\[?)\[(foo)\b(.*?)(\/)?\](?(4)|(?:((?:(?!\[(?:foo)\b).)+?)\[\/\2\])?)?(\]?)/s' => 'Catch inner / using single inside parenthesis, self-closing shortcode, with look ahead',
66        );
67
68header('Content-Type: text/plain');
69
70$i = 0;
71foreach ( $regexes as $pattern => $desc ) {
72        $i++;
73        $j = 0;
74        echo "$i. $desc\n\n\"$pattern\"\n\n";
75
76        foreach ( $tests as $test => $test_return ) {
77                foreach ( $extras as $extra => $extra_return ) {
78                        #echo "\n$test$extra:\n";
79                        $return = preg_replace_callback($pattern, 'test_regexp', "$test$extra");
80                        #echo "\n";
81                        if ( $return == "$test_return$extra_return" ) {
82                                echo "1: $test$extra => $return\n";
83                                $j++;
84                        } else {
85                                echo "0: $test$extra => $return vs. $test_return$extra_return\n";
86                        }
87                }
88        }
89        echo "\n";
90        echo "Total Score: $j";
91        echo "\n\n\n";
92}
93die;
94?>