2014-08-11 12:17:37 +00:00
|
|
|
<?php
|
|
|
|
|
|
2023-09-20 07:54:42 +00:00
|
|
|
use MediaWiki\Config\ConfigException;
|
|
|
|
|
use MediaWiki\Config\HashConfig;
|
|
|
|
|
use MediaWiki\Config\MultiConfig;
|
|
|
|
|
|
config: Widen `@covers` annotations in unit tests
Follows-up I7555c9b6b510, I6d845bdfbb80, I69b5385868, I4c7d826c7e,
I1287f3979ab, which widened the `@covers` annotations of other suites:
> We lose useful coverage and spend valuable time keeping these tags
> accurate through refactors (or worse, forget to do so).
>
> I've audited each test to confirm it is a general test of the
> subject class, where adding any called methods would be an accepted
> change, thus widening it is merely a no-op that clarifies intent
> and reduces maintenance. I am not disabling the "only track coverage
> of specified subject" benefits, nor am I claiming coverage in
> in classes outside the subject under test.
>
> Tracking tiny details per-method wastes time in keeping references
> in sync during refactors, time to realize (and fix) when people
> inevitably don't keep them in sync, time lost in finding uncovered
> code to write tests for only to realize it was already covered but
> not yet claimed, etc.
Change-Id: Ie3d6a2b4e79b6aa0dc1d2414a3ae7e2bad209c7b
2023-07-23 21:47:08 +00:00
|
|
|
/**
|
2023-09-20 07:54:42 +00:00
|
|
|
* @covers \MediaWiki\Config\MultiConfig
|
config: Widen `@covers` annotations in unit tests
Follows-up I7555c9b6b510, I6d845bdfbb80, I69b5385868, I4c7d826c7e,
I1287f3979ab, which widened the `@covers` annotations of other suites:
> We lose useful coverage and spend valuable time keeping these tags
> accurate through refactors (or worse, forget to do so).
>
> I've audited each test to confirm it is a general test of the
> subject class, where adding any called methods would be an accepted
> change, thus widening it is merely a no-op that clarifies intent
> and reduces maintenance. I am not disabling the "only track coverage
> of specified subject" benefits, nor am I claiming coverage in
> in classes outside the subject under test.
>
> Tracking tiny details per-method wastes time in keeping references
> in sync during refactors, time to realize (and fix) when people
> inevitably don't keep them in sync, time lost in finding uncovered
> code to write tests for only to realize it was already covered but
> not yet claimed, etc.
Change-Id: Ie3d6a2b4e79b6aa0dc1d2414a3ae7e2bad209c7b
2023-07-23 21:47:08 +00:00
|
|
|
*/
|
2019-06-30 13:23:53 +00:00
|
|
|
class MultiConfigTest extends \MediaWikiUnitTestCase {
|
2014-08-11 12:17:37 +00:00
|
|
|
|
|
|
|
|
public function testGet() {
|
config: Widen `@covers` annotations in unit tests
Follows-up I7555c9b6b510, I6d845bdfbb80, I69b5385868, I4c7d826c7e,
I1287f3979ab, which widened the `@covers` annotations of other suites:
> We lose useful coverage and spend valuable time keeping these tags
> accurate through refactors (or worse, forget to do so).
>
> I've audited each test to confirm it is a general test of the
> subject class, where adding any called methods would be an accepted
> change, thus widening it is merely a no-op that clarifies intent
> and reduces maintenance. I am not disabling the "only track coverage
> of specified subject" benefits, nor am I claiming coverage in
> in classes outside the subject under test.
>
> Tracking tiny details per-method wastes time in keeping references
> in sync during refactors, time to realize (and fix) when people
> inevitably don't keep them in sync, time lost in finding uncovered
> code to write tests for only to realize it was already covered but
> not yet claimed, etc.
Change-Id: Ie3d6a2b4e79b6aa0dc1d2414a3ae7e2bad209c7b
2023-07-23 21:47:08 +00:00
|
|
|
// Assert that settings are applied in the right order
|
2016-02-17 09:09:32 +00:00
|
|
|
$multi = new MultiConfig( [
|
|
|
|
|
new HashConfig( [ 'foo' => 'bar' ] ),
|
|
|
|
|
new HashConfig( [ 'foo' => 'baz', 'bar' => 'foo' ] ),
|
|
|
|
|
new HashConfig( [ 'bar' => 'baz' ] ),
|
|
|
|
|
] );
|
2014-08-11 12:17:37 +00:00
|
|
|
|
|
|
|
|
$this->assertEquals( 'bar', $multi->get( 'foo' ) );
|
|
|
|
|
$this->assertEquals( 'foo', $multi->get( 'bar' ) );
|
2019-10-05 04:47:46 +00:00
|
|
|
$this->expectException( ConfigException::class );
|
|
|
|
|
$this->expectExceptionMessage( 'MultiConfig::get: undefined option:' );
|
2014-08-11 12:17:37 +00:00
|
|
|
$multi->get( 'notset' );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testHas() {
|
2016-02-17 09:09:32 +00:00
|
|
|
$conf = new MultiConfig( [
|
|
|
|
|
new HashConfig( [ 'foo' => 'foo' ] ),
|
|
|
|
|
new HashConfig( [ 'something' => 'bleh' ] ),
|
|
|
|
|
new HashConfig( [ 'meh' => 'eh' ] ),
|
|
|
|
|
] );
|
2014-08-11 12:17:37 +00:00
|
|
|
|
|
|
|
|
$this->assertTrue( $conf->has( 'foo' ) );
|
|
|
|
|
$this->assertTrue( $conf->has( 'something' ) );
|
|
|
|
|
$this->assertTrue( $conf->has( 'meh' ) );
|
|
|
|
|
$this->assertFalse( $conf->has( 'what' ) );
|
|
|
|
|
}
|
|
|
|
|
}
|