}
foreach ( $info['config'] as $key => $val ) {
if ( $key[0] !== '@' ) {
- $this->globals["$prefix$key"] = $val;
+ $this->addConfigGlobal( "$prefix$key", $val );
}
}
}
if ( isset( $data['path'] ) && $data['path'] ) {
$value = "$dir/$value";
}
- $this->globals["$prefix$key"] = $value;
+ $this->addConfigGlobal( "$prefix$key", $value );
}
}
}
+ /**
+ * Helper function to set a value to a specific global, if it isn't set already.
+ *
+ * @param string $key The config key with the prefix and anything
+ * @param mixed $value The value of the config
+ */
+ private function addConfigGlobal( $key, $value ) {
+ if ( array_key_exists( $key, $this->globals ) ) {
+ throw new RuntimeException(
+ "The configuration setting '$key' was already set by another extension,"
+ . " and cannot be set again." );
+ }
+ $this->globals[$key] = $value;
+ }
+
protected function extractServiceWiringFiles( $dir, array $info ) {
if ( isset( $info['ServiceWiringFiles'] ) ) {
foreach ( $info['ServiceWiringFiles'] as $path ) {
"karma-chrome-launcher": "2.0.0",
"karma-firefox-launcher": "1.0.1",
"karma-mocha-reporter": "2.2.3",
- "karma-qunit": "1.0.0",
+ "karma-qunit": "1.2.1",
"nodemw": "0.10.1",
- "qunitjs": "1.23.1",
+ "qunitjs": "2.4.0",
"stylelint": "7.8.0",
"stylelint-config-wikimedia": "0.4.1",
"wdio-junit-reporter": "0.2.0",
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="30"
- height="30"
- id="svg2">
- <defs
- id="defs4" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="matrix(0.41333074,0,0,0.41333074,-183.39876,-197.95599)"
- id="layer1">
- <g
- transform="translate(455.60433,484.94177)"
- id="g3163">
- <path
- d="M 0,0.03543307 0,60.519684 43.192915,30.259842 z"
- id="path3165"
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- d="m 43.157481,0.03543307 5.633859,0 0,60.48425093 -5.633859,0 z"
- id="path3167"
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- </g>
- </g>
-</svg>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="30"
- height="30"
- id="svg2">
- <defs
- id="defs4" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="matrix(0.4132798,0,0,0.4132798,-87.72955,-233.35372)"
- id="layer1">
- <path
- d="m 272.96237,570.69005 0,60.4894 -43.19393,-30.2447 z"
- id="path3023-7"
- style="fill:#cccccc;fill-opacity:1;stroke:none" />
- <rect
- width="5.6406202"
- height="60.489399"
- x="-229.82111"
- y="570.68774"
- transform="scale(-1,1)"
- id="rect3799-9"
- style="color:#000000;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:20;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </g>
-</svg>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="30"
- height="30"
- id="svg2">
- <defs
- id="defs4" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="matrix(0.41329555,0,0,0.41329555,-111.35036,-135.3531)"
- id="layer1">
- <path
- d="m 284.11732,333.54605 0,60.4894 43.19395,-30.2447 z"
- id="path3023-7-2"
- style="fill:#cccccc;fill-opacity:1;stroke:none" />
- </g>
-</svg>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="30"
- height="30"
- id="svg2">
- <defs
- id="defs4" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="matrix(0.41329555,0,0,0.41329555,-139.69062,-163.69336)"
- id="layer1">
- <path
- d="m 395.88269,402.11748 0,60.4894 -43.19395,-30.2447 z"
- id="path3023-7-2-8"
- style="fill:#cccccc;fill-opacity:1;stroke:none" />
- </g>
-</svg>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="30"
- height="30"
- id="svg2">
- <defs
- id="defs4" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="matrix(0.41327999,0,0,0.41327999,-98.356798,-226.26904)"
- id="layer1">
- <path
- d="m 249.89477,553.5472 0,60.4894 43.19391,-30.2447 z"
- id="path3023"
- style="fill:#0000aa;fill-opacity:1;stroke:none" />
- <rect
- width="5.6406202"
- height="60.489399"
- x="293.03604"
- y="553.54492"
- id="rect3799"
- style="color:#000000;fill:#0000aa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:20;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </g>
-</svg>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- version="1.1"
- width="30"
- height="30"
- id="svg2"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="pager-arrow-fastforward-rtl.svg">
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:window-width="1366"
- inkscape:window-height="692"
- id="namedview8"
- showgrid="false"
- inkscape:zoom="17.4"
- inkscape:cx="7.0114943"
- inkscape:cy="15"
- inkscape:window-x="0"
- inkscape:window-y="24"
- inkscape:window-maximized="1"
- inkscape:current-layer="svg2" />
- <defs
- id="defs4" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="matrix(0.07055556,0,0,0.07055556,-9.1581596,-2.7587241)"
- id="layer1">
- <path
- d="m 485.26916,74.546776 0,354.317014 -253.00859,-177.15851 z"
- id="path3023-2"
- style="fill:#0000aa;fill-opacity:1;stroke:none"
- inkscape:connector-curvature="0" />
- <rect
- width="33.039963"
- height="354.31699"
- x="-232.56898"
- y="74.533081"
- transform="scale(-1,1)"
- id="rect3799-6"
- style="color:#000000;fill:#0000aa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:20;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </g>
-</svg>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="30"
- height="30"
- id="svg2">
- <defs
- id="defs4" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="matrix(0.41329555,0,0,0.41329555,-162.12666,-110.55537)"
- id="layer1">
- <path
- d="m 406.97447,273.54605 0,60.4894 43.19391,-30.2447 z"
- id="path3023-3-9"
- style="fill:#0000aa;fill-opacity:1;stroke:none" />
- </g>
-</svg>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="30"
- height="30"
- id="svg2">
- <defs
- id="defs4" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="matrix(0.41329555,0,0,0.41329555,-78.28671,-153.06577)"
- id="layer1">
- <path
- d="m 247.31124,376.4032 0,60.4894 -43.19391,-30.2447 z"
- id="path3023-3"
- style="fill:#0000aa;fill-opacity:1;stroke:none" />
- </g>
-</svg>
$this->assertEquals( 'somevalue', $extracted['globals']['egBar'] );
}
+ /**
+ * @covers ExtensionProcessor::addConfigGlobal()
+ * @expectedException RuntimeException
+ */
+ public function testDuplicateConfigKey1() {
+ $processor = new ExtensionProcessor;
+ $info = [
+ 'config' => [
+ 'Bar' => '',
+ ]
+ ] + self::$default;
+ $info2 = [
+ 'config' => [
+ 'Bar' => 'g',
+ ],
+ 'name' => 'FooBar2',
+ ];
+ $processor->extractInfo( $this->dir, $info, 1 );
+ $processor->extractInfo( $this->dir, $info2, 1 );
+ }
+
+ /**
+ * @covers ExtensionProcessor::addConfigGlobal()
+ * @expectedException RuntimeException
+ */
+ public function testDuplicateConfigKey2() {
+ $processor = new ExtensionProcessor;
+ $info = [
+ 'config' => [
+ 'Bar' => [ 'value' => 'somevalue' ],
+ ]
+ ] + self::$default;
+ $info2 = [
+ 'config' => [
+ 'Bar' => [ 'value' => 'somevalue' ],
+ ],
+ 'name' => 'FooBar2',
+ ];
+ $processor->extractInfo( $this->dir, $info, 2 );
+ $processor->extractInfo( $this->dir, $info2, 2 );
+ }
+
public static function provideExtractExtensionMessagesFiles() {
$dir = __DIR__ . '/FooBar/';
return [