dépôts
/
lhc
/
web
/
wiklou.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge "Provide direction hinting in the personal toolbar"
[lhc/web/wiklou.git]
/
tests
/
parser
/
parserTest.inc
diff --git
a/tests/parser/parserTest.inc
b/tests/parser/parserTest.inc
index
58ea1ed
..
55e93e2
100644
(file)
--- a/
tests/parser/parserTest.inc
+++ b/
tests/parser/parserTest.inc
@@
-170,7
+170,7
@@
class ParserTest {
'transformVia404' => false,
'backend' => new FSFileBackend( array(
'name' => 'local-backend',
'transformVia404' => false,
'backend' => new FSFileBackend( array(
'name' => 'local-backend',
- '
lockManager' => 'fsLockManager'
,
+ '
wikiId' => wfWikiId()
,
'containerPaths' => array(
'local-public' => wfTempDir() . '/test-repo/public',
'local-thumb' => wfTempDir() . '/test-repo/thumb',
'containerPaths' => array(
'local-public' => wfTempDir() . '/test-repo/public',
'local-thumb' => wfTempDir() . '/test-repo/thumb',
@@
-642,48
+642,65
@@
class ParserTest {
// foo="bar baz"
// foo=[[bar baz]]
// foo=bar,"baz quux"
// foo="bar baz"
// foo=[[bar baz]]
// foo=bar,"baz quux"
- $regex = '/\b
- ([\w-]+) # Key
- \b
- (?:\s*
- = # First sub-value
- \s*
- (
- "
- [^"]* # Quoted val
- "
+ // foo={...json...}
+ $defs = '(?(DEFINE)
+ (?<qstr> # Quoted string
+ "
+ (?:[^\\\\"] | \\\\.)*
+ "
+ )
+ (?<json>
+ \{ # Open bracket
+ (?:
+ [^"{}] | # Not a quoted string or object, or
+ (?&qstr) | # A quoted string, or
+ (?&json) # A json object (recursively)
+ )*
+ \} # Close bracket
+ )
+ (?<value>
+ (?:
+ (?&qstr) # Quoted val
|
\[\[
[^]]* # Link target
\]\]
|
[\w-]+ # Plain word
|
\[\[
[^]]* # Link target
\]\]
|
[\w-]+ # Plain word
+ |
+ (?&json) # JSON object
+ )
+ )
+ )';
+ $regex = '/'.$defs.'\b
+ (?<k>[\w-]+) # Key
+ \b
+ (?:\s*
+ = # First sub-value
+ \s*
+ (?<v>
+ (?&value)
+ (?:\s*
+ , # Sub-vals 1..N
+ \s*
+ (?&value)
+ )*
)
)
- (?:\s*
- , # Sub-vals 1..N
- \s*
- (
- "[^"]*" # Quoted val
- |
- \[\[[^]]*\]\] # Link target
- |
- [\w-]+ # Plain word
- )
- )*
)?
/x';
)?
/x';
+ $valueregex = '/'.$defs.'(?&value)/x';
if ( preg_match_all( $regex, $instring, $matches, PREG_SET_ORDER ) ) {
foreach ( $matches as $bits ) {
if ( preg_match_all( $regex, $instring, $matches, PREG_SET_ORDER ) ) {
foreach ( $matches as $bits ) {
- array_shift( $bits );
- $key = strtolower( array_shift( $bits ) );
- if ( count( $bits ) == 0 ) {
+ $key = strtolower( $bits[ 'k' ] );
+ if ( !isset( $bits[ 'v' ] ) ) {
$opts[$key] = true;
$opts[$key] = true;
- } elseif ( count( $bits ) == 1 ) {
- $opts[$key] = $this->cleanupOption( array_shift( $bits ) );
} else {
} else {
- // Array!
- $opts[$key] = array_map( array( $this, 'cleanupOption' ), $bits );
+ preg_match_all( $valueregex, $bits[ 'v' ], $vmatches );
+ $opts[$key] = array_map( array( $this, 'cleanupOption' ), $vmatches[0] );
+ if ( count( $opts[$key] ) == 1 ) {
+ $opts[$key] = $opts[$key][0];
+ }
}
}
}
}
}
}
@@
-692,12
+709,16
@@
class ParserTest {
private function cleanupOption( $opt ) {
if ( substr( $opt, 0, 1 ) == '"' ) {
private function cleanupOption( $opt ) {
if ( substr( $opt, 0, 1 ) == '"' ) {
- return s
ubstr( $opt, 1, -1
);
+ return s
tripcslashes( substr( $opt, 1, -1 )
);
}
if ( substr( $opt, 0, 2 ) == '[[' ) {
return substr( $opt, 2, -2 );
}
}
if ( substr( $opt, 0, 2 ) == '[[' ) {
return substr( $opt, 2, -2 );
}
+
+ if ( substr( $opt, 0, 1 ) == '{' ) {
+ return FormatJson::decode( $opt, true );
+ }
return $opt;
}
return $opt;
}
@@
-738,7
+759,7
@@
class ParserTest {
'transformVia404' => false,
'backend' => new FSFileBackend( array(
'name' => 'local-backend',
'transformVia404' => false,
'backend' => new FSFileBackend( array(
'name' => 'local-backend',
- '
lockManager' => 'fsLockManager'
,
+ '
wikiId' => wfWikiId()
,
'containerPaths' => array(
'local-public' => $this->uploadDir,
'local-thumb' => $this->uploadDir . '/thumb',
'containerPaths' => array(
'local-public' => $this->uploadDir,
'local-thumb' => $this->uploadDir . '/thumb',