diff --git a/includes/parser/ParserOutput.php b/includes/parser/ParserOutput.php index 47d93a9ffc3..99860d482c1 100644 --- a/includes/parser/ParserOutput.php +++ b/includes/parser/ParserOutput.php @@ -3091,15 +3091,26 @@ class ParserOutput extends CacheTime implements ContentMetadataCollector { $this->mFileSearchOptions = $jsonData['FileSearchOptions'] ?? []; $this->mExternalLinks = $jsonData['ExternalLinks'] ?? []; $this->mInterwikiLinks = $jsonData['InterwikiLinks'] ?? []; - $this->mNewSection = $jsonData['NewSection'] ?? false; - $this->mHideNewSection = $jsonData['HideNewSection'] ?? false; - $this->mNoGallery = $jsonData['NoGallery'] ?? false; $this->mHeadItems = $jsonData['HeadItems'] ?? []; $this->mModuleSet = array_fill_keys( $jsonData['Modules'] ?? [], true ); $this->mModuleStyleSet = array_fill_keys( $jsonData['ModuleStyles'] ?? [], true ); $this->mJsConfigVars = $jsonData['JsConfigVars'] ?? []; $this->mWarnings = $jsonData['Warnings'] ?? []; + + // Set flags stored as properties $this->mFlags = $jsonData['Flags'] ?? []; + $this->mNoGallery = $jsonData['NoGallery'] ?? false; + $this->mEnableOOUI = $jsonData['EnableOOUI'] ?? false; + $this->setIndexPolicy( $jsonData['IndexPolicy'] ?? '' ); + $this->mNewSection = $jsonData['NewSection'] ?? false; + $this->mHideNewSection = $jsonData['HideNewSection'] ?? false; + $this->mPreventClickjacking = $jsonData['PreventClickjacking'] ?? false; + // Set all generic output flags (whether stored as properties or not) + // (This is effectively a logical-OR if these are also serialized + // above.) + foreach ( $jsonData['OutputFlags'] ?? [] as $flag ) { + $this->setOutputFlag( $flag ); + } if ( isset( $jsonData['TOCData'] ) ) { $this->mTOCData = $jsonData['TOCData']; @@ -3121,15 +3132,12 @@ class ParserOutput extends CacheTime implements ContentMetadataCollector { } $this->mProperties = self::detectAndDecodeBinary( $jsonData['Properties'] ?? [] ); $this->mTimestamp = $jsonData['Timestamp'] ?? null; - $this->mEnableOOUI = $jsonData['EnableOOUI'] ?? false; - $this->setIndexPolicy( $jsonData['IndexPolicy'] ?? '' ); $this->mExtensionData = $jsonData['ExtensionData'] ?? []; $this->mLimitReportData = $jsonData['LimitReportData'] ?? []; $this->mLimitReportJSData = $jsonData['LimitReportJSData'] ?? []; $this->mCacheMessage = $jsonData['CacheMessage'] ?? ''; $this->mParseStartTime = []; // invalid after reloading $this->mTimeProfile = $jsonData['TimeProfile'] ?? []; - $this->mPreventClickjacking = $jsonData['PreventClickjacking'] ?? false; $this->mExtraScriptSrcs = $jsonData['ExtraScriptSrcs'] ?? []; $this->mExtraDefaultSrcs = $jsonData['ExtraDefaultSrcs'] ?? []; $this->mExtraStyleSrcs = $jsonData['ExtraStyleSrcs'] ?? []; diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-CacheTime-cacheExpiry.json b/tests/phpunit/data/ParserCache/1.45_outputflags-CacheTime-cacheExpiry.json new file mode 100644 index 00000000000..fd58eeea0b7 --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-CacheTime-cacheExpiry.json @@ -0,0 +1 @@ +{"ParseUsedOptions":[],"CacheExpiry":10,"CacheTime":"","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\CacheTime","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-CacheTime-cacheRevisionId.json b/tests/phpunit/data/ParserCache/1.45_outputflags-CacheTime-cacheRevisionId.json new file mode 100644 index 00000000000..caef44e80d2 --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-CacheTime-cacheRevisionId.json @@ -0,0 +1 @@ +{"ParseUsedOptions":[],"CacheExpiry":null,"CacheTime":"","CacheRevisionId":1234,"_type_":"MediaWiki\\Parser\\CacheTime","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-CacheTime-cacheTime.json b/tests/phpunit/data/ParserCache/1.45_outputflags-CacheTime-cacheTime.json new file mode 100644 index 00000000000..149669b69e9 --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-CacheTime-cacheTime.json @@ -0,0 +1 @@ +{"ParseUsedOptions":[],"CacheExpiry":null,"CacheTime":"20010419042521","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\CacheTime","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-CacheTime-empty.json b/tests/phpunit/data/ParserCache/1.45_outputflags-CacheTime-empty.json new file mode 100644 index 00000000000..4d0c168586a --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-CacheTime-empty.json @@ -0,0 +1 @@ +{"ParseUsedOptions":[],"CacheExpiry":null,"CacheTime":"","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\CacheTime","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-CacheTime-usedOptions.json b/tests/phpunit/data/ParserCache/1.45_outputflags-CacheTime-usedOptions.json new file mode 100644 index 00000000000..7fdcdf04010 --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-CacheTime-usedOptions.json @@ -0,0 +1 @@ +{"ParseUsedOptions":{"optA":true,"optX":true},"CacheExpiry":null,"CacheTime":"","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\CacheTime","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-binaryPageProperties.json b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-binaryPageProperties.json new file mode 100644 index 00000000000..62b7c158151 --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-binaryPageProperties.json @@ -0,0 +1 @@ +{"Text":"","LanguageLinks":[],"Categories":[],"Indicators":[],"TitleText":"","Links":[],"LinksSpecial":[],"Templates":[],"TemplateIds":[],"Images":[],"FileSearchOptions":[],"ExternalLinks":[],"InterwikiLinks":[],"ExistenceLinks":[],"HeadItems":[],"Modules":[],"ModuleStyles":[],"JsConfigVars":[],"Warnings":[],"WarningMsgs":[],"TOCData":null,"Properties":{"empty":"","\\x00":"\u0000","gzip":{"_type_":"string","_encoding_":"base64","_data_":"H4sIAAAAAAAAA8tIzcnJVyjPLycKCQkJLiAnykkBAIURSg0LAAAA"}},"Timestamp":null,"ExtensionData":[],"LimitReportData":[],"LimitReportJSData":[],"CacheMessage":"","TimeProfile":[],"ParseStartTime":[],"ExtraScriptSrcs":[],"ExtraDefaultSrcs":[],"ExtraStyleSrcs":[],"SpeculativeRevId":null,"SpeculativePageIdUsed":null,"RevisionTimestampUsed":null,"RevisionUsedSha1Base36":null,"WrapperDivClasses":[],"OutputFlags":[],"ParseUsedOptions":[],"CacheExpiry":null,"CacheTime":"","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\ParserOutput","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-cacheTime.json b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-cacheTime.json new file mode 100644 index 00000000000..771cac292ea --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-cacheTime.json @@ -0,0 +1 @@ +{"Text":"CacheTime","LanguageLinks":[],"Categories":[],"Indicators":[],"TitleText":"","Links":[],"LinksSpecial":[],"Templates":[],"TemplateIds":[],"Images":[],"FileSearchOptions":[],"ExternalLinks":[],"InterwikiLinks":[],"ExistenceLinks":[],"HeadItems":[],"Modules":[],"ModuleStyles":[],"JsConfigVars":[],"Warnings":[],"WarningMsgs":[],"TOCData":null,"Properties":[],"Timestamp":null,"ExtensionData":[],"LimitReportData":[],"LimitReportJSData":[],"CacheMessage":"","TimeProfile":[],"ParseStartTime":[],"ExtraScriptSrcs":[],"ExtraDefaultSrcs":[],"ExtraStyleSrcs":[],"SpeculativeRevId":null,"SpeculativePageIdUsed":null,"RevisionTimestampUsed":null,"RevisionUsedSha1Base36":null,"WrapperDivClasses":[],"OutputFlags":[],"ParseUsedOptions":[],"CacheExpiry":10,"CacheTime":"20010419042521","CacheRevisionId":42,"_type_":"MediaWiki\\Parser\\ParserOutput","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-codecableExtensionData.json b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-codecableExtensionData.json new file mode 100644 index 00000000000..181a964c1d7 --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-codecableExtensionData.json @@ -0,0 +1 @@ +{"Text":"","LanguageLinks":[],"Categories":[],"Indicators":[],"TitleText":"","Links":[],"LinksSpecial":[],"Templates":[],"TemplateIds":[],"Images":[],"FileSearchOptions":[],"ExternalLinks":[],"InterwikiLinks":[],"ExistenceLinks":[],"HeadItems":[],"Modules":[],"ModuleStyles":[],"JsConfigVars":[],"Warnings":[],"WarningMsgs":[],"TOCData":null,"Properties":[],"Timestamp":null,"ExtensionData":{"map":{"a":{"super_class_field":"super","sub_class_field":"sub","_type_":"MediaWiki\\Tests\\Json\\JsonDeserializableSubClass","_complex_":true},"b":{"r":2,"d":"2","_type_":"stdClass","_complex_":true},"_complex_":true},"_complex_":true},"LimitReportData":[],"LimitReportJSData":[],"CacheMessage":"","TimeProfile":[],"ParseStartTime":[],"ExtraScriptSrcs":[],"ExtraDefaultSrcs":[],"ExtraStyleSrcs":[],"SpeculativeRevId":null,"SpeculativePageIdUsed":null,"RevisionTimestampUsed":null,"RevisionUsedSha1Base36":null,"WrapperDivClasses":[],"OutputFlags":[],"ParseUsedOptions":[],"CacheExpiry":null,"CacheTime":"","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\ParserOutput","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-empty.json b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-empty.json new file mode 100644 index 00000000000..1c96620690a --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-empty.json @@ -0,0 +1 @@ +{"Text":"","LanguageLinks":[],"Categories":[],"Indicators":[],"TitleText":"","Links":[],"LinksSpecial":[],"Templates":[],"TemplateIds":[],"Images":[],"FileSearchOptions":[],"ExternalLinks":[],"InterwikiLinks":[],"ExistenceLinks":[],"HeadItems":[],"Modules":[],"ModuleStyles":[],"JsConfigVars":[],"Warnings":[],"WarningMsgs":[],"TOCData":null,"Properties":[],"Timestamp":null,"ExtensionData":[],"LimitReportData":[],"LimitReportJSData":[],"CacheMessage":"","TimeProfile":[],"ParseStartTime":[],"ExtraScriptSrcs":[],"ExtraDefaultSrcs":[],"ExtraStyleSrcs":[],"SpeculativeRevId":null,"SpeculativePageIdUsed":null,"RevisionTimestampUsed":null,"RevisionUsedSha1Base36":null,"WrapperDivClasses":[],"OutputFlags":[],"ParseUsedOptions":[],"CacheExpiry":null,"CacheTime":"","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\ParserOutput","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-extensionData.json b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-extensionData.json new file mode 100644 index 00000000000..838367085ed --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-extensionData.json @@ -0,0 +1 @@ +{"Text":"","LanguageLinks":[],"Categories":[],"Indicators":[],"TitleText":"","Links":[],"LinksSpecial":[],"Templates":[],"TemplateIds":[],"Images":[],"FileSearchOptions":[],"ExternalLinks":[],"InterwikiLinks":[],"ExistenceLinks":[],"HeadItems":[],"Modules":[],"ModuleStyles":[],"JsConfigVars":[],"Warnings":[],"WarningMsgs":[],"TOCData":null,"Properties":[],"Timestamp":null,"ExtensionData":{"boolean":true,"number":42,"string":"string","array":[1,2,3],"map":{"key":"value"}},"LimitReportData":[],"LimitReportJSData":[],"CacheMessage":"","TimeProfile":[],"ParseStartTime":[],"ExtraScriptSrcs":[],"ExtraDefaultSrcs":[],"ExtraStyleSrcs":[],"SpeculativeRevId":null,"SpeculativePageIdUsed":null,"RevisionTimestampUsed":null,"RevisionUsedSha1Base36":null,"WrapperDivClasses":[],"OutputFlags":[],"ParseUsedOptions":[],"CacheExpiry":null,"CacheTime":"","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\ParserOutput","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-pageProperties1_45.json b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-pageProperties1_45.json new file mode 100644 index 00000000000..9e1bb6fa02f --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-pageProperties1_45.json @@ -0,0 +1 @@ +{"Text":"","LanguageLinks":[],"Categories":[],"Indicators":[],"TitleText":"","Links":[],"LinksSpecial":[],"Templates":[],"TemplateIds":[],"Images":[],"FileSearchOptions":[],"ExternalLinks":[],"InterwikiLinks":[],"ExistenceLinks":[],"HeadItems":[],"Modules":[],"ModuleStyles":[],"JsConfigVars":[],"Warnings":[],"WarningMsgs":[],"TOCData":null,"Properties":{"boolean":1,"null":"","number":42,"string":"string","array":"Array","map":"Array"},"Timestamp":null,"ExtensionData":[],"LimitReportData":[],"LimitReportJSData":[],"CacheMessage":"","TimeProfile":[],"ParseStartTime":[],"ExtraScriptSrcs":[],"ExtraDefaultSrcs":[],"ExtraStyleSrcs":[],"SpeculativeRevId":null,"SpeculativePageIdUsed":null,"RevisionTimestampUsed":null,"RevisionUsedSha1Base36":null,"WrapperDivClasses":[],"OutputFlags":[],"ParseUsedOptions":[],"CacheExpiry":null,"CacheTime":"","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\ParserOutput","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-text.json b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-text.json new file mode 100644 index 00000000000..fa42021aa29 --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-text.json @@ -0,0 +1 @@ +{"Text":"Lorem Ipsum","LanguageLinks":[],"Categories":[],"Indicators":[],"TitleText":"","Links":[],"LinksSpecial":[],"Templates":[],"TemplateIds":[],"Images":[],"FileSearchOptions":[],"ExternalLinks":[],"InterwikiLinks":[],"ExistenceLinks":[],"HeadItems":[],"Modules":[],"ModuleStyles":[],"JsConfigVars":[],"Warnings":[],"WarningMsgs":[],"TOCData":null,"Properties":[],"Timestamp":null,"ExtensionData":[],"LimitReportData":[],"LimitReportJSData":[],"CacheMessage":"","TimeProfile":[],"ParseStartTime":[],"ExtraScriptSrcs":[],"ExtraDefaultSrcs":[],"ExtraStyleSrcs":[],"SpeculativeRevId":null,"SpeculativePageIdUsed":null,"RevisionTimestampUsed":null,"RevisionUsedSha1Base36":null,"WrapperDivClasses":[],"OutputFlags":[],"ParseUsedOptions":[],"CacheExpiry":null,"CacheTime":"","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\ParserOutput","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-usedOptions.json b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-usedOptions.json new file mode 100644 index 00000000000..9e30743ffcd --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-usedOptions.json @@ -0,0 +1 @@ +{"Text":"Dummy","LanguageLinks":[],"Categories":[],"Indicators":[],"TitleText":"","Links":[],"LinksSpecial":[],"Templates":[],"TemplateIds":[],"Images":[],"FileSearchOptions":[],"ExternalLinks":[],"InterwikiLinks":[],"ExistenceLinks":[],"HeadItems":[],"Modules":[],"ModuleStyles":[],"JsConfigVars":[],"Warnings":[],"WarningMsgs":[],"TOCData":null,"Properties":[],"Timestamp":null,"ExtensionData":[],"LimitReportData":[],"LimitReportJSData":[],"CacheMessage":"","TimeProfile":[],"ParseStartTime":[],"ExtraScriptSrcs":[],"ExtraDefaultSrcs":[],"ExtraStyleSrcs":[],"SpeculativeRevId":null,"SpeculativePageIdUsed":null,"RevisionTimestampUsed":null,"RevisionUsedSha1Base36":null,"WrapperDivClasses":[],"OutputFlags":[],"ParseUsedOptions":{"optA":true,"optX":true},"CacheExpiry":null,"CacheTime":"","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\ParserOutput","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withEmptyToC.json b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withEmptyToC.json new file mode 100644 index 00000000000..75abc8bb816 --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withEmptyToC.json @@ -0,0 +1 @@ +{"Text":"","LanguageLinks":[],"Categories":[],"Indicators":[],"TitleText":"","Links":[],"LinksSpecial":[],"Templates":[],"TemplateIds":[],"Images":[],"FileSearchOptions":[],"ExternalLinks":[],"InterwikiLinks":[],"ExistenceLinks":[],"HeadItems":[],"Modules":[],"ModuleStyles":[],"JsConfigVars":[],"Warnings":[],"WarningMsgs":[],"TOCData":{"sections":{"_complex_":true},"extensionData":[],"_type_":"Wikimedia\\Parsoid\\Core\\TOCData","_complex_":true},"Properties":[],"Timestamp":null,"ExtensionData":[],"LimitReportData":[],"LimitReportJSData":[],"CacheMessage":"","TimeProfile":[],"ParseStartTime":[],"ExtraScriptSrcs":[],"ExtraDefaultSrcs":[],"ExtraStyleSrcs":[],"SpeculativeRevId":null,"SpeculativePageIdUsed":null,"RevisionTimestampUsed":null,"RevisionUsedSha1Base36":null,"WrapperDivClasses":[],"OutputFlags":[],"ParseUsedOptions":[],"CacheExpiry":null,"CacheTime":"","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\ParserOutput","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withFalsyProperties1_45.json b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withFalsyProperties1_45.json new file mode 100644 index 00000000000..206da4ee464 --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withFalsyProperties1_45.json @@ -0,0 +1 @@ +{"Text":"","LanguageLinks":[],"Categories":[],"Indicators":[],"TitleText":"","Links":[],"LinksSpecial":[],"Templates":[],"TemplateIds":[],"Images":[],"FileSearchOptions":[],"ExternalLinks":[],"InterwikiLinks":[],"ExistenceLinks":[],"HeadItems":[],"Modules":[],"ModuleStyles":[],"JsConfigVars":[],"Warnings":[],"WarningMsgs":[],"TOCData":null,"Properties":{"boolean":0,"null":"","number":0,"string":"","numstring":"0","array":"Array"},"Timestamp":null,"ExtensionData":[],"LimitReportData":[],"LimitReportJSData":[],"CacheMessage":"","TimeProfile":[],"ParseStartTime":[],"ExtraScriptSrcs":[],"ExtraDefaultSrcs":[],"ExtraStyleSrcs":[],"SpeculativeRevId":null,"SpeculativePageIdUsed":null,"RevisionTimestampUsed":null,"RevisionUsedSha1Base36":null,"WrapperDivClasses":[],"OutputFlags":[],"ParseUsedOptions":[],"CacheExpiry":null,"CacheTime":"","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\ParserOutput","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withMetadataPost1_31.json b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withMetadataPost1_31.json new file mode 100644 index 00000000000..783df01e546 --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withMetadataPost1_31.json @@ -0,0 +1 @@ +{"Text":"","LanguageLinks":[],"Categories":[],"Indicators":[],"TitleText":"","Links":[],"LinksSpecial":[],"Templates":[],"TemplateIds":[],"Images":[],"FileSearchOptions":[],"ExternalLinks":[],"InterwikiLinks":[],"ExistenceLinks":[],"HeadItems":[],"Modules":[],"ModuleStyles":[],"JsConfigVars":[],"Warnings":[],"WarningMsgs":[],"TOCData":null,"Properties":[],"Timestamp":null,"ExtensionData":[],"LimitReportData":[],"LimitReportJSData":[],"CacheMessage":"","TimeProfile":[],"ParseStartTime":[],"ExtraScriptSrcs":[],"ExtraDefaultSrcs":[],"ExtraStyleSrcs":[],"SpeculativeRevId":null,"SpeculativePageIdUsed":4242,"RevisionTimestampUsed":"19731129213309","RevisionUsedSha1Base36":"test_hash","WrapperDivClasses":{"test_wrapper":true},"OutputFlags":["mw-NoGallery"],"ParseUsedOptions":[],"CacheExpiry":null,"CacheTime":"","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\ParserOutput","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withMetadataPost1_34.json b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withMetadataPost1_34.json new file mode 100644 index 00000000000..d391a80e431 --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withMetadataPost1_34.json @@ -0,0 +1 @@ +{"Text":"","LanguageLinks":[],"Categories":[],"Indicators":[],"TitleText":"","Links":[],"LinksSpecial":{"Link3":1},"Templates":[],"TemplateIds":[],"Images":[],"FileSearchOptions":[],"ExternalLinks":[],"InterwikiLinks":[],"ExistenceLinks":[],"HeadItems":[],"Modules":[],"ModuleStyles":[],"JsConfigVars":[],"Warnings":[],"WarningMsgs":[],"TOCData":null,"Properties":[],"Timestamp":null,"ExtensionData":[],"LimitReportData":[],"LimitReportJSData":[],"CacheMessage":"","TimeProfile":[],"ParseStartTime":[],"ExtraScriptSrcs":["script1"],"ExtraDefaultSrcs":["default1"],"ExtraStyleSrcs":["style1"],"SpeculativeRevId":null,"SpeculativePageIdUsed":null,"RevisionTimestampUsed":null,"RevisionUsedSha1Base36":null,"WrapperDivClasses":[],"OutputFlags":[],"ParseUsedOptions":[],"CacheExpiry":null,"CacheTime":"","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\ParserOutput","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withMetadataPost1_44.json b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withMetadataPost1_44.json new file mode 100644 index 00000000000..03768a88060 --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withMetadataPost1_44.json @@ -0,0 +1 @@ +{"Text":"","LanguageLinks":["m:link1","mw:link2"],"Categories":{"category2":"1","category1":"2"},"Indicators":{"indicator1":"indicator1_value"},"TitleText":"title_text1","Links":{"0":{"Link1":42},"2":{"Link2":43}},"LinksSpecial":[],"Templates":{"10":{"Template1":42}},"TemplateIds":{"10":{"Template1":4242}},"Images":{"Image1":1},"FileSearchOptions":{"Image1":{"time":"19731129213309","sha1":"test_sha1"}},"ExternalLinks":{"https://test.org":1},"InterwikiLinks":{"enwiki":{"interwiki1":1,"interwiki2":1}},"ExistenceLinks":[],"HeadItems":{"tag1":"head_item1"},"Modules":["module1"],"ModuleStyles":["module_style1"],"JsConfigVars":{"key1":"value1"},"Warnings":{"warning1":1},"WarningMsgs":{"rawmessage":{"key":"rawmessage","params":{"0":"warning1","_complex_":true},"_type_":"Wikimedia\\Message\\MessageValue","_complex_":true},"_complex_":true},"TOCData":{"sections":{"0":{"hLevel":1,"line":"heading_1","number":"1.0","index":"T-1","anchor":"heading_1","linkAnchor":"#heading_1","_complex_":true},"1":{"tocLevel":1,"hLevel":2,"line":"heading_2","number":"2.0","index":"T-2","anchor":"heading_2","linkAnchor":"#heading_2","_complex_":true},"_complex_":true},"extensionData":[],"_type_":"Wikimedia\\Parsoid\\Core\\TOCData","_complex_":true},"Properties":[],"Timestamp":"20010419042521","ExtensionData":[],"LimitReportData":{"limit_report_key1":"value1"},"LimitReportJSData":{"limit_report_key1":"value1"},"CacheMessage":"","TimeProfile":[],"ParseStartTime":[],"ExtraScriptSrcs":[],"ExtraDefaultSrcs":[],"ExtraStyleSrcs":[],"SpeculativeRevId":42,"SpeculativePageIdUsed":null,"RevisionTimestampUsed":null,"RevisionUsedSha1Base36":null,"WrapperDivClasses":[],"OutputFlags":["test","mw-EnableOOUI","mw-NoIndexPolicy","mw-NewSection","mw-HideNewSection"],"ParseUsedOptions":[],"CacheExpiry":null,"CacheTime":"","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\ParserOutput","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withMetadataPost1_45.json b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withMetadataPost1_45.json new file mode 100644 index 00000000000..165e60ecbc4 --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withMetadataPost1_45.json @@ -0,0 +1 @@ +{"Text":"","LanguageLinks":["m:link1","mw:link2"],"Categories":{"category2":"1","category1":"2"},"Indicators":{"indicator1":"indicator1_value"},"TitleText":"title_text1","Links":{"0":{"Link1":42},"2":{"Link2":43}},"LinksSpecial":[],"Templates":{"10":{"Template1":42}},"TemplateIds":{"10":{"Template1":4242}},"Images":{"Image1":1},"FileSearchOptions":{"Image1":{"time":"19731129213309","sha1":"test_sha1"}},"ExternalLinks":{"https://test.org":1},"InterwikiLinks":{"enwiki":{"interwiki1":1,"interwiki2":1}},"ExistenceLinks":[],"HeadItems":{"tag1":"head_item1"},"Modules":["module1"],"ModuleStyles":["module_style1"],"JsConfigVars":{"key1":"value1"},"Warnings":{"warning1":1},"WarningMsgs":{"rawmessage":{"key":"rawmessage","params":{"0":"warning1","_complex_":true},"_type_":"Wikimedia\\Message\\MessageValue","_complex_":true},"_complex_":true},"TOCData":{"sections":{"0":{"hLevel":1,"line":"heading_1","number":"1.0","index":"T-1","anchor":"heading_1","linkAnchor":"#heading_1","_complex_":true},"1":{"tocLevel":1,"hLevel":2,"line":"heading_2","number":"2.0","index":"T-2","anchor":"heading_2","linkAnchor":"#heading_2","_complex_":true},"_complex_":true},"extensionData":[],"_type_":"Wikimedia\\Parsoid\\Core\\TOCData","_complex_":true},"Properties":[],"Timestamp":"20010419042521","ExtensionData":[],"LimitReportData":{"limit_report_key1":"value1"},"LimitReportJSData":{"limit_report_key1":"value1"},"CacheMessage":"","TimeProfile":[],"ParseStartTime":[],"ExtraScriptSrcs":[],"ExtraDefaultSrcs":[],"ExtraStyleSrcs":[],"SpeculativeRevId":42,"SpeculativePageIdUsed":null,"RevisionTimestampUsed":null,"RevisionUsedSha1Base36":null,"WrapperDivClasses":[],"OutputFlags":["vary-revision-id","mw-EnableOOUI","mw-NoIndexPolicy","mw-NewSection","mw-HideNewSection"],"ParseUsedOptions":[],"CacheExpiry":null,"CacheTime":"","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\ParserOutput","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withSections.json b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withSections.json new file mode 100644 index 00000000000..04c3687c5d5 --- /dev/null +++ b/tests/phpunit/data/ParserCache/1.45_outputflags-ParserOutput-withSections.json @@ -0,0 +1 @@ +{"Text":"","LanguageLinks":[],"Categories":[],"Indicators":[],"TitleText":"","Links":[],"LinksSpecial":[],"Templates":[],"TemplateIds":[],"Images":[],"FileSearchOptions":[],"ExternalLinks":[],"InterwikiLinks":[],"ExistenceLinks":[],"HeadItems":[],"Modules":[],"ModuleStyles":[],"JsConfigVars":[],"Warnings":[],"WarningMsgs":[],"TOCData":{"sections":{"0":{"hLevel":1,"line":"heading_1","number":"1.0","index":"T-1","anchor":"heading_1","linkAnchor":"#heading_1","_complex_":true},"1":{"tocLevel":1,"hLevel":2,"line":"heading_2","number":"2.0","index":"T-2","anchor":"heading_2","linkAnchor":"#heading_2","_complex_":true},"_complex_":true},"extensionData":[],"_type_":"Wikimedia\\Parsoid\\Core\\TOCData","_complex_":true},"Properties":[],"Timestamp":null,"ExtensionData":[],"LimitReportData":[],"LimitReportJSData":[],"CacheMessage":"","TimeProfile":[],"ParseStartTime":[],"ExtraScriptSrcs":[],"ExtraDefaultSrcs":[],"ExtraStyleSrcs":[],"SpeculativeRevId":null,"SpeculativePageIdUsed":null,"RevisionTimestampUsed":null,"RevisionUsedSha1Base36":null,"WrapperDivClasses":[],"OutputFlags":[],"ParseUsedOptions":[],"CacheExpiry":null,"CacheTime":"","CacheRevisionId":null,"_type_":"MediaWiki\\Parser\\ParserOutput","_complex_":true} \ No newline at end of file diff --git a/tests/phpunit/includes/parser/ParserCacheSerializationTestCases.php b/tests/phpunit/includes/parser/ParserCacheSerializationTestCases.php index 846a9791a72..a1980f7afe8 100644 --- a/tests/phpunit/includes/parser/ParserCacheSerializationTestCases.php +++ b/tests/phpunit/includes/parser/ParserCacheSerializationTestCases.php @@ -7,6 +7,7 @@ use MediaWiki\Debug\MWDebug; use MediaWiki\Json\JsonCodec; use MediaWiki\Parser\CacheTime; use MediaWiki\Parser\ParserOutput; +use MediaWiki\Parser\ParserOutputFlags; use MediaWiki\Tests\Json\JsonDeserializableSubClass; use MediaWiki\Title\Title; use MediaWiki\Title\TitleValue; @@ -314,6 +315,11 @@ abstract class ParserCacheSerializationTestCases { $parserOutputWithMetadataPost1_44 = clone $parserOutputWithMetadata; $parserOutputWithMetadataPost1_44->setLanguageLinks( [ 'm:link1', 'mw:link2' ] ); + $parserOutputWithMetadataPost1_45 = clone $parserOutputWithMetadataPost1_44; + // Non-standard output flags were deprecated in MW 1.45 + $parserOutputWithMetadataPost1_45->setOutputFlag( 'test', false ); + $parserOutputWithMetadataPost1_45->setOutputFlag( ParserOutputFlags::VARY_REVISION_ID ); + $parserOutputWithSections = new ParserOutput( '' ); $parserOutputWithSections->setSections( self::SECTIONS ); @@ -596,6 +602,61 @@ abstract class ParserCacheSerializationTestCases { $testCase->assertArrayEquals( [ 'test' ], $object->getAllFlags() ); } ], + 'withMetadataPost1_45' => [ + 'instance' => $parserOutputWithMetadataPost1_45, + 'assertions' => static function ( MediaWikiIntegrationTestCase $testCase, ParserOutput $object ) { + $testCase->assertSame( 42, $object->getSpeculativeRevIdUsed() ); + $testCase->assertArrayEquals( [ 'm:link1', 'mw:link2' ], $object->getLanguageLinks() ); + $testCase->assertArrayEquals( [ 'enwiki' => [ + 'interwiki1' => 1, + 'interwiki2' => 1 + ] ], $object->getInterwikiLinks() ); + $testCase->assertArrayEquals( [ 'category1', 'category2' ], $object->getCategoryNames() ); + $testCase->assertArrayEquals( [ + 'category1' => '2', + 'category2' => '1' + ], $object->getCategoryMap() ); + $testCase->assertArrayEquals( [ 'indicator1' => 'indicator1_value' ], $object->getIndicators() ); + $testCase->assertSame( 'title_text1', $object->getTitleText() ); + $testCase->assertArrayEquals( self::SECTIONS, $object->getSections() ); + $testCase->assertNotNull( $object->getTOCData() ); + $testCase->assertArrayEquals( [ + NS_MAIN => [ 'Link1' => 42 ], + NS_USER => [ 'Link2' => 43 ] + ], $object->getLinks() ); + $testCase->assertArrayEquals( [ + NS_SPECIAL => [ 'Template1' => 42 ] + ], $object->getTemplates() ); + $testCase->assertArrayEquals( [ + NS_SPECIAL => [ 'Template1' => 4242 ] + ], $object->getTemplateIds() ); + $testCase->assertArrayEquals( [ 'Image1' => 1 ], $object->getImages() ); + $testCase->assertArrayEquals( [ 'Image1' => [ + 'time' => MWTimestamp::convert( TS_MW, 123456789 ), 'sha1' => 'test_sha1' + ] ], $object->getFileSearchOptions() ); + $testCase->assertArrayEquals( [ 'https://test.com' => 1 ], $object->getExternalLinks() ); + $testCase->assertArrayEquals( [ 'tag1' => 'head_item1' ], $object->getHeadItems() ); + $testCase->assertArrayEquals( [ 'module1' ], $object->getModules() ); + $testCase->assertArrayEquals( [ 'module_style1' ], $object->getModuleStyles() ); + $testCase->assertArrayEquals( [ 'key1' => 'value1' ], $object->getJsConfigVars() ); + $testCase->assertArrayEquals( [ 'warning1' ], $object->getWarnings() ); + $testCase->assertSame( 'noindex', $object->getIndexPolicy() ); + $testCase->assertSame( MWTimestamp::convert( TS_MW, 987654321 ), $object->getRevisionTimestamp() ); + $testCase->assertArrayEquals( + [ 'limit_report_key1' => 'value1' ], + $object->getLimitReportData() + ); + $testCase->assertArrayEquals( + [ 'limit_report_key1' => 'value1' ], + $object->getLimitReportJSData() + ); + $testCase->assertTrue( $object->getEnableOOUI() ); + $testCase->assertTrue( $object->getHideNewSection() ); + $testCase->assertTrue( $object->getNewSection() ); + $testCase->assertTrue( $object->getOutputFlag( ParserOutputFlags::VARY_REVISION_ID ) ); + $testCase->assertArrayEquals( [ 'vary-revision-id' ], $object->getAllFlags() ); + } + ], 'withSections' => [ 'instance' => $parserOutputWithSections, 'assertions' => static function ( MediaWikiIntegrationTestCase $testCase, ParserOutput $object ) { @@ -731,6 +792,7 @@ abstract class ParserCacheSerializationTestCases { $oldDeserializer = $d; $d = static function ( $data ) use ( $oldDeserializer ) { MWDebug::filterDeprecationForTest( '/::addLanguageLink without prefix/' ); + MWDebug::filterDeprecationForTest( '/::setOutputFlag with non-standard flag/' ); return $oldDeserializer( $data ); }; }