+ return $this->testAttributes[$name] ??
+ $this->attributes[$name] ?? [];
+ }
+
+ /**
+ * Force override the value of an attribute during tests
+ *
+ * @param string $name Name of attribute to override
+ * @param array $value Value to set
+ * @return ScopedCallback to reset
+ * @since 1.33
+ */
+ public function setAttributeForTest( $name, array $value ) {
+ // @codeCoverageIgnoreStart
+ if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+ throw new RuntimeException( __METHOD__ . ' can only be used in tests' );
+ }
+ // @codeCoverageIgnoreEnd
+ if ( isset( $this->testAttributes[$name] ) ) {
+ throw new Exception( "The attribute '$name' has already been overridden" );
+ }
+ $this->testAttributes[$name] = $value;
+ return new ScopedCallback( function () use ( $name ) {
+ unset( $this->testAttributes[$name] );
+ } );