if ( isset( $prop['sections'] ) ) {
$result_array['sections'] = $p_result->getSections();
}
+ if ( isset( $prop['parsewarnings'] ) ) {
+ $result_array['parsewarnings'] = $p_result->getWarnings();
+ }
if ( isset( $prop['displaytitle'] ) ) {
$result_array['displaytitle'] = $p_result->getDisplayTitle() ?:
'modulestyles' => 'm',
'properties' => 'pp',
'limitreportdata' => 'lr',
+ 'parsewarnings' => 'pw'
];
$this->setIndexedTagNames( $result_array, $result_mapping );
$result->addValue( null, $this->getModuleName(), $result_array );
],
'prop' => [
ApiBase::PARAM_DFLT => 'text|langlinks|categories|links|templates|' .
- 'images|externallinks|sections|revid|displaytitle|iwlinks|properties',
+ 'images|externallinks|sections|revid|displaytitle|iwlinks|' .
+ 'properties|parsewarnings',
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_TYPE => [
'text',
'limitreportdata',
'limitreporthtml',
'parsetree',
+ 'parsewarnings'
],
ApiBase::PARAM_HELP_MSG_PER_VALUE => [
'parsetree' => [ 'apihelp-parse-paramvalue-prop-parsetree', CONTENT_MODEL_WIKITEXT ],
"apihelp-parse-paramvalue-prop-limitreportdata": "Gives the limit report in a structured way. Gives no data, when <var>$1disablelimitreport</var> is set.",
"apihelp-parse-paramvalue-prop-limitreporthtml": "Gives the HTML version of the limit report. Gives no data, when <var>$1disablelimitreport</var> is set.",
"apihelp-parse-paramvalue-prop-parsetree": "The XML parse tree of revision content (requires content model <code>$1</code>)",
+ "apihelp-parse-paramvalue-prop-parsewarnings": "Gives the warnings that occurred while parsing content.",
"apihelp-parse-param-pst": "Do a pre-save transform on the input before parsing it. Only valid when used with text.",
"apihelp-parse-param-onlypst": "Do a pre-save transform (PST) on the input, but don't parse it. Returns the same wikitext, after a PST has been applied. Only valid when used with <var>$1text</var>.",
"apihelp-parse-param-effectivelanglinks": "Includes language links supplied by extensions (for use with <kbd>$1prop=langlinks</kbd>).",
"apihelp-parse-paramvalue-prop-limitreportdata": "{{doc-apihelp-paramvalue|parse|prop|limitreportdata}}",
"apihelp-parse-paramvalue-prop-limitreporthtml": "{{doc-apihelp-paramvalue|parse|prop|limitreporthtml}}",
"apihelp-parse-paramvalue-prop-parsetree": "{{doc-apihelp-paramvalue|parse|prop|parsetree|params=* $1 - Value of the constant CONTENT_MODEL_WIKITEXT|paramstart=2}}",
+ "apihelp-parse-paramvalue-prop-parsewarnings": "{{doc-apihelp-paramvalue|parse|prop|parsewarnings}}",
"apihelp-parse-param-pst": "{{doc-apihelp-param|parse|pst}}",
"apihelp-parse-param-onlypst": "{{doc-apihelp-param|parse|onlypst}}",
"apihelp-parse-param-effectivelanglinks": "{{doc-apihelp-param|parse|effectivelanglinks}}",
"api-help-param-multi-separate": "Separera värden med <kbd>|</kbd> eller [[Special:ApiHelp/main#main/datatypes|alternativ]].",
"apierror-articleexists": "Artikeln du försökte skapa har redan skapats.",
"apierror-baddiff": "Diff kan inte hämtas. En eller båda sidversioner finns inte eller du har inte behörighet för att visa dem.",
+ "apierror-invalidoldimage": "Parametern <var>oldimage</var> har ett ogiltigt format.",
"apierror-invalidsection": "Parametern <var>section</var> måste vara ett giltigt avsnitts-ID eller <kbd>new</kbd>.",
"apierror-nosuchuserid": "Det finns ingen användare med ID $1.",
"apierror-protect-invalidaction": "Ogiltig skyddstyp \"$1\".",
"config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] eo an dibab kentañ evit MediaWiki hag an hini skoret ar gwellañ. Mont a ra MediaWiki en-dro gant [{{int:version-db-mariadb-url}} MariaDB] ha [{{int:version-db-percona-url}} Percona Server] ivez, kenglotus o-daou gant MySQL. ([http://www.php.net/manual/en/mysqli.installation.php Penaos kempunañ PHP gant skor MySQL])",
"config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] zo anezhi ur reizhiad diaz roadennoù frank a wirioù brudet-mat a c'haller ober gantañ e plas MySQL. ([http://www.php.net/manual/en/pgsql.installation.php Penaos kempunañ PHP gant skor PostgreSQL])",
"config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] zo anezhi ur reizhiad diaz roadennoù skañv skoret eus ar c'hentañ. ([http://www.php.net/manual/en/pdo.installation.php Penaos kempunañ PHP gant skor SQLite], implijout a ra PDO)",
- "config-dbsupport-oracle": "* $1 zo un diaz titouroù kenwerzhel. ([http://www.php.net/manual/en/oci8.installation.php Penaos kempunañ PHP gant skor OCI8])",
+ "config-dbsupport-oracle": "* Un embregerezh kenwerzhel diaz roadennoù eo [{{int:version-db-oracle-url}} Oracle]. ([http://www.php.net/manual/en/oci8.installation.php Penaos kempunañ PHP gant skor OCI8])",
+ "config-dbsupport-mssql": "* Un embregerezh kenwerzhel diaz roadennoù evit Windows eo [{{int:version-db-mssql-url}} Microsoft SQL Server]. ([http://www.php.net/manual/en/sqlsrv.installation.php Penaos kempunañ PHP gant skor SQLSRV])",
"config-header-mysql": "Arventennoù MySQL",
"config-header-postgres": "Arventennoù PostgreSQL",
"config-header-sqlite": "Arventennoù SQLite",
"config-missing-db-name": "Ret eo deoc'h merkañ un dalvoudenn evit \"{{int:config-db-name}}\".",
"config-missing-db-host": "Ret eo deoc'h merkañ un dalvoudenn evit \"{{int:config-db-host}}\"",
"config-missing-db-server-oracle": "Ret eo deoc'h merkañ un dalvoudenn evit \"{{int:config-db-host-oracle}}\".",
- "config-invalid-db-server-oracle": "Direizh eo anv TNS an diaz titouroù \"$1\".\nOber hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha pikoù (.).",
+ "config-invalid-db-server-oracle": "Direizh eo anv TNS an diaz roadennoù \"$1\".\nOber gant an neudennad \"TNS Name\" pe c'hoazh gant \"Easy Connect ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Hentennoù envel Oracle]).",
"config-invalid-db-name": "Direizh eo anv an diaz titouroù \"$1\".\nOber hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha tiredoù (-).",
"config-invalid-db-prefix": "Direizh eo rakger an diaz titouroù \"$1\".\nOber hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha tiredoù (-).",
"config-connection-error": "$1.\n\nGwiriit anv an ostiz, an anv implijer, ar ger-tremen ha klaskit en-dro.",
global $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType;
$candidates = [ $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType ];
foreach ( $candidates as $candidate ) {
+ $cache = false;
if ( $candidate !== CACHE_NONE && $candidate !== CACHE_ANYTHING ) {
- return self::getInstance( $candidate );
+ $cache = self::getInstance( $candidate );
+ // CACHE_ACCEL might default to nothing if no APCu
+ // See includes/ServiceWiring.php
+ if ( !( $cache instanceof EmptyBagOStuff ) ) {
+ return $cache;
+ }
}
}
protected function getContent( $titleText ) {
$title = Title::newFromText( $titleText );
if ( !$title ) {
- return null;
+ return null; // Bad title
}
// If the page is a redirect, follow the redirect.
$content = $this->getContentObj( $title );
$title = $content ? $content->getUltimateRedirectTarget() : null;
if ( !$title ) {
- return null;
+ return null; // Dead redirect
}
}
} elseif ( $handler->isSupportedFormat( CONTENT_FORMAT_JAVASCRIPT ) ) {
$format = CONTENT_FORMAT_JAVASCRIPT;
} else {
- return null;
+ return null; // Bad content model
}
$content = $this->getContentObj( $title );
if ( !$content ) {
- return null;
+ return null; // No content found
}
return $content->serialize( $format );
"login": "گیریش",
"login-security": "کیملیگینیزی تائید ائدین",
"nav-login-createaccount": "گیریش / حساب یارات",
- "userlogin": "گیریش / حساب یارات",
- "userloginnocreate": "گیریش",
"logout": "چیخیش",
"userlogout": "چیخیش",
"notloggedin": "گیرمهمیسینیز",
"userlogin-noaccount": "حسابینیز یوخدورمو؟",
"userlogin-joinproject": "{{SITENAME}}-ه قوشولون",
- "nologin": "حسابینیز یوخدومو؟ $1.",
- "nologinlink": "حساب یارات",
"createaccount": "حساب یارات",
- "gotaccount": "اؤنجهدن حسابینیز وارمی؟ $1.",
- "gotaccountlink": "گیریش",
- "userlogin-resetlink": "گیریش بیلگیلرینیزی اونوتموسونوز؟",
"userlogin-resetpassword-link": "رمزینیزی اونوتموسوز مو؟",
"userlogin-helplink2": "گیریش ایله کؤمک",
"userlogin-loggedin": "سیر حال حاضیردا {{GENDER:$1|$1}} عونوانیندا گیریش ائدیب سیز.\nآشاغیداکی فورمودان بیر آیری ایشلدن عونوانیندا گیریش اوچون ایشلدین.",
"createacct-another-email-ph": "ایمیل آدرسینیزی یازین",
"createaccountmail": "بیر گئچیجی راستگله رمز ایشلت و اونو آشاغیدا بللندیرن ایمیل آدرسینه گؤندر",
"createacct-realname": "دوغرو آد (ایستگه باغلی)",
- "createaccountreason": "نَدَنلیک:",
"createacct-reason": "سبب",
"createacct-reason-ph": "ندن سیز باشقا حساب یارادیرسینیز",
"createacct-reason-help": "حساب یاراتماق لیستینده گؤستریلن مساژ",
"savearticle": "صفحهنی ذخیره ائت",
"savechanges": "دَییشیکلیکلری ذخیره ائت",
"publishpage": "صفحهنی یاییملا",
- "publishchanges": "دَییشیکلیکلری یاییملا",
+ "publishchanges": "دَییشیکلیکلری یای",
"preview": "اؤنگؤستریش",
"showpreview": "سیناق گؤستریش",
"showdiff": "دَییشیکلیکلری گؤستر",
"log-name-managetags": "اِتیکت ایداره گئچمیشی",
"log-name-tag": "اِتیکت ژورنالی",
"rightsnone": "(هئچ)",
- "revdelete-summary": "دَییشدیرمه قیساسی",
"feedback-adding": "صحیفهیه گئری-بیلدیریم آرتیریلیر...",
"feedback-back": "دالی",
"feedback-bugcheck": "گؤزل! فقط لوطفاً باخین او [$1 تانینمیش خطالار]دان اولماسین.",
"newimages-summary": "Гэтая спэцыяльная старонка паказвае нядаўна загружаныя файлы.",
"newimages-legend": "Фільтар",
"newimages-label": "Назва файла (альбо яе частка):",
+ "newimages-user": "IP-адрас ці імя ўдзельніка",
"newimages-showbots": "Паказаць загружаныя робатамі",
"newimages-hidepatrolled": "Схаваць патруляваныя загрузкі",
"noimages": "Выявы адсутнічаюць.",
"logentry-import-interwiki": "$1 অন্য একটি উইকিতে থেকে $3 {{GENDER:$2|আমদানি করেছে}}",
"logentry-import-interwiki-details": "$1 $5 থেকে $3 {{GENDER:$2|আমদানি করেছেন}} ($4টি {{PLURAL:$4|সংশোধন}})",
"logentry-merge-merge": "$1 $4-এ $3 {{GENDER:$2|একত্রীকরণ করেছেন}} ($5 তারিখের সংশোধন পর্যন্ত)",
- "logentry-move-move": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে {{GENDER:$2|স্থানান্তর}} করেছেন",
- "logentry-move-move-noredirect": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই {{GENDER:$2|স্থানান্তর}} করেছেন",
- "logentry-move-move_redir": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে পুনির্নির্দেশনার মাধ্যমে {{GENDER:$2|স্থানান্তর}} করেছেন",
- "logentry-move-move_redir-noredirect": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে পুনর্নির্দেশনা ছাড়াই {{GENDER:$2|স্থানান্তর}} করেছেন",
+ "logentry-move-move": "$1 $3 কে $4 শিরোনামে {{GENDER:$2|স্থানান্তর}} করেছেন",
+ "logentry-move-move-noredirect": "$1 $3 পাতাটিকে $4 শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই {{GENDER:$2|স্থানান্তর}} করেছেন",
+ "logentry-move-move_redir": "$1 $3 পাতাটিকে $4 শিরোনামে পুনির্নির্দেশনার মাধ্যমে {{GENDER:$2|স্থানান্তর}} করেছেন",
+ "logentry-move-move_redir-noredirect": "$1 $3 পাতাটিকে $4 শিরোনামে পুনর্নির্দেশনা ছাড়াই {{GENDER:$2|স্থানান্তর}} করেছেন",
"logentry-patrol-patrol": "$1 ব্যবহারকারী $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে {{GENDER:$2|চিহ্নিত}} করেছেন",
"logentry-patrol-patrol-auto": "$1 ব্যবহারকারী স্বয়ংক্রিয়ভাবে $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে {{GENDER:$2|চিহ্নিত}} করেছেন",
"logentry-newusers-newusers": "$1 ব্যবহারকারী অ্যাকাউন্টটি {{GENDER:$2|তৈরি করা}} হয়েছে",
"restrictionsfield-label": "অনুমোদিত আইপি পরিসীমা:",
"restrictionsfield-help": "লাইন প্রতি একটি আইপি ঠিকানা বা CIDR পরিসীমা। সবকিছু সক্রিয় করতে ব্যবহার করুন: :<pre>0.0.0.0/0\n::/0</pre>",
"revid": "সংশোধন $1",
- "pageid": "পাতার আইডি $1"
+ "pageid": "পাতার আইডি $1",
+ "rawhtml-notallowed": "<html> ট্যাগ স্বাভাবিক পৃষ্ঠাগুলির বাহিরে ব্যবহার করা যাবে না।"
}
"restrictionsfield-label": "Lijorennoù IP aotreet :",
"restrictionsfield-help": "Ur chomlec'h IP pe un esaouenn CIDR dre linenn. Evit gweredekaat pep tra, ober gant <pre>0.0.0.0/0\n::/0</pre>",
"revid": "Adweladenn $1",
- "pageid": "ID ar bajenn $1"
+ "pageid": "ID ar bajenn $1",
+ "rawhtml-notallowed": "N'hall an tikedennoù <html> bezañ implijet nemet er pajennoù normal."
}
"restrictionsfield-label": "Erlaubte IP-Adressbereiche:",
"restrictionsfield-help": "Eine IP-Adresse oder ein CIDR-Bereich pro Zeile. Um alles zu aktivieren, verwende:\n<pre>\n0.0.0.0/0\n::/0\n</pre>",
"revid": "Version $1",
- "pageid": "Seitenkennung $1"
+ "pageid": "Seitenkennung $1",
+ "rawhtml-notallowed": "<html>-Tags können nicht außerhalb von normalen Seiten verwendet werden."
}
"savearticle": "Perre qeyd ke",
"savechanges": "Vırnayışan qeyd kerê",
"publishpage": "Riperri bare ke",
- "publishchanges": "Vırnayışan aşkera ke",
+ "publishchanges": "Vırnayışan qeyd ke",
"preview": "Verqayt",
"showpreview": "Verasayışi bımocne",
"showdiff": "Vurnayışan bımotne",
"login": "प्रवेश (लगईन)",
"login-security": "तमरो पहिचान जाचँ गर",
"nav-login-createaccount": "प्रवेश गर्ने/नयाँ खाता बनाउन्या",
- "userlogin": "प्रवेश गर्ने / नयाँ खाता बनाउन्या",
- "userloginnocreate": "प्रवेश",
"logout": "बाहिर निस्कन्या",
"userlogout": "बाहिर निस्कन्या",
"notloggedin": "प्रवेश (लग ईन) नगरिएको",
"userlogin-noaccount": "के खाता छैन ?",
"userlogin-joinproject": "{{SITENAME}} मी खाता खोल ।",
- "nologin": "तमरो खाता छैन? $1।",
- "nologinlink": "नयाँ खाता खोल",
"createaccount": "खाता खोल",
- "gotaccount": "तमरो खाता छनोई छ? $1।",
- "gotaccountlink": "प्रवेश",
- "userlogin-resetlink": "प्रवेश सम्बन्धी विवरणहरू बिसरया भयो?",
"userlogin-resetpassword-link": "पासवर्ड भुलिगया?",
"userlogin-helplink2": "प्रवेश गद्दलाई सहयोग",
"userlogin-loggedin": "तमी {{GENDER:$1|$1}}को रूपमी प्रवेश (लग इन) भइ सक्यौ ।\nअर्को प्रयोगकर्ताको रूपमी प्रवेश (लग इन) गर्न तलको फारम प्रयोग गर ।",
"createacct-email-ph": "तमरो इमेल ठेगाना भरऽ",
"createacct-another-email-ph": "इमेल ठेगाना भर",
"createacct-realname": "वास्तविक नाम (ऐच्छिक)",
- "createaccountreason": "कारण:",
"createacct-reason": "कारण",
"createacct-reason-ph": "क्याई तम नयाँ खाता खोल्ला छौ?",
"createacct-submit": "तमरो खाता बनाऽ",
"newimages": "नौला फाइलहरूको ग्यालरी",
"imagelisttext": " '''$1''' {{PLURAL:$1|फाइल|फाइलहरू}} को निम्न सुची ,क्रमवद्ध $2.",
"newimages-summary": "यै खास पानाले अन्तिम अपलोड गर्याका फाइलहरू धेकाउँन्छ ।",
+ "newimages-user": "आइपी(IP) ठेगाना या प्रयोगकर्ता नाउँ",
"days": "{{PLURAL:$1|$1 दिन|$1 दिनहरू}}",
"metadata": "मेटाडेटा",
"metadata-help": "यै फाइलमि अतिरिक्त जानकारीहरू छन्, यैलाई बणुउन सम्भवतः डिजिटल क्यामरा और स्क्यानर प्रयोग गरियाको हुनसकन्छ । यदि यै फाइललाई खास अवस्थाबठे फेरबदल गरियाको हो भण्या यै फाइलले सब्बै विवरण प्रतिबिम्बित गद्द सक्यानाइथी ।",
"post-expand-template-argument-warning": "Aviso: Esta página contiene al menos un parámetro de plantilla con un tamaño de expansión demasiado grande.\nSe han descartado esos parámetros.",
"post-expand-template-argument-category": "Páginas que contienen plantillas con parámetros descartados",
"parser-template-loop-warning": "Se ha detectado un bucle de plantilla: [[$1]]",
+ "template-loop-category": "Páginas con bucles de plantillas",
+ "template-loop-category-desc": "Esta página contiene un bucle de plantillas, es decir, una plantilla que se llama a sí misma recursivamente.",
"parser-template-recursion-depth-warning": "Se ha superado el límite de profundidad de la recursividad de plantillas ($1)",
"language-converter-depth-warning": "Se ha superado el límite de profundidad del convertidor de idioma ($1)",
"node-count-exceeded-category": "Páginas que sobrepasan la cantidad de nodos",
"restrictionsfield-label": "Plages IP autorisées :",
"restrictionsfield-help": "Une adresse IP ou une plage CIDR par ligne. Pour tout activer, utiliser <pre>0.0.0.0/0\n::/0</pre>",
"revid": "version $1",
- "pageid": "ID de page $1"
+ "pageid": "ID de page $1",
+ "rawhtml-notallowed": "Les balises <html> ne peuvent pas être utilisées en dehors des pages normales."
}
"restrictionsfield-label": "טווחי כתובות IP מותרים:",
"restrictionsfield-help": "כתובת IP אחת או טווח CIDR אחד בשורה. כדי לאפשר את הכול, ניתן להשתמש ב:<pre>0.0.0.0/0\n::/0</pre>",
"revid": "גרסה $1",
- "pageid": "מזהה דף $1"
+ "pageid": "מזהה דף $1",
+ "rawhtml-notallowed": "לא ניתן להשתמש בתגיות <html> מחוץ לדפים רגילים."
}
"restrictionsfield-label": "Intervalli IP consentiti:",
"restrictionsfield-help": "Un indirizzo IP o intervallo CIDR per linea. Per consentire tutto, utilizza:<pre>0.0.0.0/0\n::/0</pre>",
"revid": "versione $1",
- "pageid": "ID della pagina $1"
+ "pageid": "ID della pagina $1",
+ "rawhtml-notallowed": "I tag <html> non possono essere utilizzati al di fuori delle normali pagine."
}
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (uga deleng [[Special:NewPages|pratélaning kaca-kaca anyar]])",
"recentchanges-legend-plusminus": "(''±123'')",
"recentchanges-submit": "Tuduhaké",
+ "rcfilters-activefilters": "Saringan murub",
+ "rcfilters-restore-default-filters": "Pulihaké saringan gawan",
+ "rcfilters-search-placeholder": "Saring owah-owahan anyar (lurua utawa wiwita ngetik)",
+ "rcfilters-invalid-filter": "Saringan ora sah",
+ "rcfilters-filterlist-title": "Saringan",
+ "rcfilters-filterlist-feedbacklink": "Wènèhi saran ngenani saringan (béta) singa anyar",
+ "rcfilters-filterlist-noresults": "Saringan ora katemu",
"rcnotefrom": "Ing ngisor iki owah-owahan wiwit <strong>$2</strong> (kapacak nganti <strong>$1</strong> owah-owahan).",
"rclistfrom": "Tuduhaké owah-owahan anyar kawit $2, $3",
"rcshowhideminor": "$1 besutan cilik",
"newimages-summary": "Оваа службена страница ги покажува скоро подигнатите податотеки.",
"newimages-legend": "Филтрирај",
"newimages-label": "Име на податотека (или дел од името):",
+ "newimages-user": "IP-адреса или корисничко име",
"newimages-showbots": "Прикажувај подигања од ботови",
"newimages-hidepatrolled": "Сокриј испатролриани подигања",
"noimages": "Нема ништо.",
"restrictionsfield-label": "Допуштени IP-опсези:",
"restrictionsfield-help": "Една IP-адреса или CIDR-опсег по ред. За да овозможите сè, користете<br /><code>0.0.0.0/0</code><br /><code>::/0</code>",
"revid": "преработка $1",
- "pageid": "назнака на страницата $1"
+ "pageid": "назнака на страницата $1",
+ "rawhtml-notallowed": "<html>-ознаките не може да се користат вон нормалните страници."
}
"post-expand-template-argument-warning": "Uwaga – strona zawiera co najmniej jeden argument szablonu, który po rozwinięciu jest zbyt duży.\nArgument ten będzie pominięty.",
"post-expand-template-argument-category": "Strony, w których użyto szablon z pominięciem argumentów",
"parser-template-loop-warning": "Wykryto pętlę w szablonie [[$1]]",
+ "template-loop-category": "Strony z pętlami szablonów",
"template-loop-category-desc": "Strona zawiera pętlę szablonów, czyli szablon, który wywołuje sam siebie rekursywnie.",
"parser-template-recursion-depth-warning": "Przekroczno limit głębokości rekurencji szablonu ($1)",
"language-converter-depth-warning": "Przekroczono ograniczenie ($1) głębokości zagnieżdżenia konwersji językowej",
"restrictionsfield-label": "Dozwolone zakresy adresów IP:",
"restrictionsfield-help": "Jeden adres IP lub zakres CIDR w wierszu. Aby zaznaczyć wszystkie, użyj:<pre>0.0.0.0/0\n::/0</pre>",
"revid": "wersja $1",
- "pageid": "ID strony: $1"
+ "pageid": "ID strony: $1",
+ "rawhtml-notallowed": "Znaczniki <html> nie mogą być stosowane poza zwykłymi stronami."
}
"restrictionsfield-label": "Dovoljeni IP-obsegi:",
"restrictionsfield-help": "En IP-naslov ali CIDR-območje na vrstico. Da omogočite vse, uporabite:\n<pre>0.0.0.0/0\n::/0</pre>",
"revid": "redakcija $1",
- "pageid": "ID strani $1"
+ "pageid": "ID strani $1",
+ "rawhtml-notallowed": "Oznak <html> ni možno uporabljati izven normalnih strani."
}
"restrictionsfield-label": "Tillåtna IP-intervall:",
"restrictionsfield-help": "En IP-adress eller CIDR-intervall per rad. För att aktivera allting, använd<br /><code>0.0.0.0/0</code><br /><code>::/0</code>",
"revid": "sidversion $1",
- "pageid": "sid-ID $1"
+ "pageid": "sid-ID $1",
+ "rawhtml-notallowed": "<html>-taggar kan inte användas utanför normala sidor."
}
},
"tog-underline": "Bağlantıların altını çizme:",
"tog-hideminor": "Son değişiklikler sayfasında küçük düzenlemeleri gizle",
- "tog-hidepatrolled": "Son değişikliklerdeki devriyenin gördüğü düzenlemeleri gizle",
+ "tog-hidepatrolled": "Son değişiklikler sayfasında devriyenin gördüğü düzenlemeleri gizle",
"tog-newpageshidepatrolled": "Yeni sayfalar listesinde devriyenin gördüğü sayfaları gizle",
"tog-hidecategorization": "Sayfa kategorilendirmesini gizle",
"tog-extendwatchlist": "İzleme listesini sadece en son değil, tüm değişiklikleri gösterecek şekilde genişlet",
"tog-watchdeletion": "Sildiğim sayfaları ve dosyaları izleme listeme ekle",
"tog-watchuploads": "Yüklediğim yeni dosyaları izleme listeme ekle",
"tog-watchrollback": "Eski hâline getirdiğim sayfaları izleme listeme ekle",
- "tog-minordefault": "Varsayılan olarak, bütün düzenlemeleri küçük düzenleme olarak işaretle",
- "tog-previewontop": "Ön izlemeyi, düzenleme kutusunun öncesinde göster",
- "tog-previewonfirst": "İlk düzenlemede ön izlemeyi göster",
+ "tog-minordefault": "Tüm düzenlemeleri varsayılan olarak küçük düzenleme olarak işaretle",
+ "tog-previewontop": "Düzenleme kutusu öncesinde önizleme göster",
+ "tog-previewonfirst": "İlk düzenlemede önizleme göster",
"tog-enotifwatchlistpages": "İzleme listemdeki bir sayfa veya dosya değiştirilirse bana e-posta gönder",
"tog-enotifusertalkpages": "Kullanıcı mesaj sayfamda değişiklik olduğunda bana e-posta gönder",
- "tog-enotifminoredits": "Sayfalardaki ve dosyalardaki küçük değişikliklerde de bana e-posta gönder",
- "tog-enotifrevealaddr": "Bildirim postalarında benim eposta adresimi açıkça göster",
+ "tog-enotifminoredits": "Sayfalardaki ve dosyalardaki küçük düzenlemelerde de bana e-posta gönder",
+ "tog-enotifrevealaddr": "Bildirim e-postalarında e-posta adresimi açıkça göster",
"tog-shownumberswatching": "İzleyen kullanıcı sayısını göster",
"tog-oldsig": "Mevcut imzanız:",
- "tog-fancysig": "İmzaya vikimetin muamelesi yap (otomatik bir bağlantı olmadan)",
- "tog-uselivepreview": "Canlı ön izlemeyi kullan",
- "tog-forceeditsummary": "Özeti boş bıraktığımda beni uyar",
- "tog-watchlisthideown": "İzleme listemde benim değişkliklerimi gizle",
- "tog-watchlisthidebots": "İzleme listemde bot değişikliklerini gizle",
- "tog-watchlisthideminor": "İzleme listemde küçük değişiklikleri gizle",
- "tog-watchlisthideliu": "İzleme listemde, kayıtlı kullanıcılar tarafından yapılan değişiklikleri gizle",
- "tog-watchlistreloadautomatically": "Filtre değiştiğinde izleme listesini otomatik yenile (JavaScript gerekir)",
- "tog-watchlisthideanons": "İzleme listemde, anonim kullanıcılar tarafından yapılan değişiklikleri gizle",
- "tog-watchlisthidepatrolled": "İzleme listesinde, devriye görmüş değişiklikleri gizle",
+ "tog-fancysig": "İmzayı viki metni olarak (otomatik bağlantı olmadan) işle",
+ "tog-uselivepreview": "Canlı önizleme kullan",
+ "tog-forceeditsummary": "Boş bir düzenleme özeti girdiğimde bana sor",
+ "tog-watchlisthideown": "Düzenlemelerimi izleme listesinde gizle",
+ "tog-watchlisthidebots": "Bot düzenlemelerini izleme listesinde gizle",
+ "tog-watchlisthideminor": "Küçük düzenlemeleri izleme listesinde gizle",
+ "tog-watchlisthideliu": "Oturum açmış kullanıcıların düzenlemelerini izleme listesinde gizle",
+ "tog-watchlistreloadautomatically": "Her süzgeç değişikliği olduğunda izleme listesini otomatik olarak yeniden yükle (JavaScript gerekir)",
+ "tog-watchlisthideanons": "Anonim kullanıcıların düzenlemelerini izleme listesinde gizle",
+ "tog-watchlisthidepatrolled": "Devriyenin gördüğü düzenlemeleri izleme listesinde gizle",
"tog-watchlisthidecategorization": "Sayfa kategorilendirmesini gizle",
- "tog-ccmeonemails": "Diğer kullanıcılara gönderdiğim e-postaların bir kopyasını bana da gönder",
- "tog-diffonly": "Sayfa içeriğini, sürüm farklarının altında gösterme",
+ "tog-ccmeonemails": "Diğer kullanıcılara gönderdiğim e-postaların kopyalarını bana gönder",
+ "tog-diffonly": "Farkların altında sayfa içeriğini gösterme",
"tog-showhiddencats": "Gizli kategorileri göster",
- "tog-norollbackdiff": "Geri döndürme uygulandıktan sonra farkları gösterme",
- "tog-useeditwarning": "Yaptığım değişiklikleri kaydetmeden sayfayı kapatırken beni uyar",
- "tog-prefershttps": "Oturum açarken her zaman güvenli bağlantı kullanın",
- "underline-always": "Daima",
- "underline-never": "Asla",
- "underline-default": "Tema ya da tarayıcı varsayılanı",
- "editfont-style": "Düzenleme alanının yazı tipi:",
+ "tog-norollbackdiff": "Eski hâline getirdikten sonra farkı gösterme",
+ "tog-useeditwarning": "Bir düzenleme sayfasından değişiklikleri kaydetmeden ayrılırken beni uyar",
+ "tog-prefershttps": "Oturum açıkken her zaman güvenli bir bağlantı kullan",
+ "underline-always": "Her zaman",
+ "underline-never": "Hiçbir zaman",
+ "underline-default": "Görünüm ya da tarayıcı varsayılanı",
+ "editfont-style": "Düzenleme alanının yazı tipi biçemi:",
"editfont-default": "Tarayıcı varsayılanı",
- "editfont-monospace": "Sabit aralıklı yazı tipi",
- "editfont-sansserif": "Çıkıntısız (Sans-serif) yazı tipi",
- "editfont-serif": "Çıkıntılı (serif) yazı tipi",
+ "editfont-monospace": "Tek aralıklı yazı tipi",
+ "editfont-sansserif": "Sans-serif yazı tipi",
+ "editfont-serif": "Serif yazı tipi",
"sunday": "Pazar",
"monday": "Pazartesi",
"tuesday": "Salı",
"december-date": "$1 Aralık",
"period-am": "ÖÖ",
"period-pm": "ÖS",
- "pagecategories": "{{PLURAL:$1|Kategori|Kategoriler}}",
+ "pagecategories": "$1 kategori",
"category_header": "\"$1\" kategorisindeki sayfalar",
"subcategories": "Alt kategoriler",
- "category-media-header": "\"$1\" kategorisindeki dosyalar",
- "category-empty": "<em>Bu kategoride henüz herhangi bir sayfa ya da dosya bulunmamaktadır.</em>",
- "hidden-categories": "{{PLURAL:$1|Gizli kategori|Gizli kategoriler}}",
+ "category-media-header": "\"$1\" kategorisindeki ortamlar",
+ "category-empty": "<em>Şu anda bu kategoride herhangi bir sayfa ya da Ortam bulunmuyor.</em>",
+ "hidden-categories": "$1 gizli kategori",
"hidden-category-category": "Gizli kategoriler",
- "category-subcat-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki alt kategoriyi içermektedir.|Bu kategoride aşağıdaki {{PLURAL:$1|alt kategori|$1 alt kategori}} dahil $2 alt kategori vardır.}}",
+ "category-subcat-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki alt kategoriyi içermektedir.|Bu kategoride aşağıdaki $1 alt kategori dâhil toplam $2 alt kategori vardır.}}",
"category-subcat-count-limited": "Bu kategori aşağıdaki {{PLURAL:$1|alt kategoriye|$1 alt kategoriye}} sahiptir.",
"category-article-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki sayfayı içermektedir.|Toplam $2 taneden, aşağıdaki {{PLURAL:$1|sayfa|$1 sayfa}} bu kategoridedir.}}",
"category-article-count-limited": "Bu kategoride {{PLURAL:$1|sayfa|$1 sayfa}} bulunmaktadır.",
"post-expand-template-argument-warning": "'''Увага:''' Ця сторінка містить принаймні один аргумент шаблону, який має надто великий розмір для розгортання.\nЦі аргументи були проігноровані.",
"post-expand-template-argument-category": "Сторінки, які містять пропущені аргументи шаблонів",
"parser-template-loop-warning": "Виявлена петля у шаблонах: [[$1]]",
+ "template-loop-category": "Сторінки з петлями шаблонів",
+ "template-loop-category-desc": "Ця сторінка містить петлю шаблонів, тобто шаблон, який рекурсивно викликає сам себе.",
"parser-template-recursion-depth-warning": "Перевищене обмеження глибини рекурсії шаблону ($1)",
"language-converter-depth-warning": "Перевищене обмеження глибини мовного конвертора ($1)",
"node-count-exceeded-category": "Сторінки, на яких перевищено лічильник вузлів",
"page_first": "перша",
"page_last": "остання",
"histlegend": "Вибір версії: Позначте у круглих віконцях версії для порівняння і натисніть «Enter» або кнопку внизу.\n\nПояснення: (поточн.) = відмінності від поточної версії,\n(ост.) = відмінності від попередньої версії, '''м''' = незначне редагування",
- "history-fieldset-title": "Ð\9fеÑ\80еглÑ\8fнÑ\83Ñ\82и Ñ\96Ñ\81Ñ\82оÑ\80Ñ\96Ñ\8e",
- "history-show-deleted": "ТÑ\96лÑ\8cки вилÑ\83Ñ\87енÑ\96",
+ "history-fieldset-title": "Ð\9fоÑ\88Ñ\83к веÑ\80Ñ\81Ñ\96й",
+ "history-show-deleted": "Ð\9bиÑ\88е вилÑ\83Ñ\87енÑ\96 веÑ\80Ñ\81Ñ\96Ñ\97",
"histfirst": "найдавніші",
"histlast": "найновіші",
"historysize": "($1 {{PLURAL:$1|байт|байти|байтів}})",
"prefs-help-prefershttps": "Цей параметр набуде чинності при вашому наступному вході у систему.",
"prefswarning-warning": "Ви внесли в свої налаштування зміни, які ще не були збережені.\nЯкщо ви залишите цю сторінку, не натиснувши \"$1\", налаштування не будуть оновлені.",
"prefs-tabs-navigation-hint": "Порада: Ви можете використовувати клавіші стрілок вліво і вправо для переходу між вкладками в списку вкладок.",
- "userrights": "Ð\9aеÑ\80Ñ\83ваннÑ\8f пÑ\80авами користувачів",
+ "userrights": "Ð\9fÑ\80ава користувачів",
"userrights-lookup-user": "Виберіть користувача",
"userrights-user-editname": "Введіть ім'я користувача:",
"editusergroup": "Завантажити групи користувачів",
"rcfilters-invalid-filter": "Недійсний фільтр",
"rcfilters-empty-filter": "Без фільтрів. Показано всі зміни.",
"rcfilters-filterlist-title": "Фільтри",
+ "rcfilters-filterlist-whatsthis": "Що це?",
"rcfilters-filterlist-feedbacklink": "Надайте відгук про нові (бета) фільтри",
"rcfilters-highlightbutton-title": "Виділити результати",
"rcfilters-highlightmenu-title": "Вибрати колір",
"rcfilters-highlightmenu-help": "Вибрати колір, щоб виділити цю властивість",
"rcfilters-filterlist-noresults": "Фільтри не знайдено",
+ "rcfilters-noresults-conflict": "Результатів не знайдено через конфлікт у пошукових критеріях",
+ "rcfilters-state-message-subset": "Цей фільтр не має впливу, оскільки його результати включені в результати {{PLURAL:$2|цього, ширшого, фільтра|цих, ширших, фільтрів}} (спробуйте увімкнути виділення, щоб вирізнити їх): $1",
+ "rcfilters-state-message-fullcoverage": "Вибір усіх фільтрів у групі — це все одно, що не вибирати жодного з них, тобто таке фільтрування не має впливу. Гупа містить: $1",
"rcfilters-filtergroup-registration": "Реєстрація користувача",
"rcfilters-filter-registered-label": "Зареєстровані",
"rcfilters-filter-registered-description": "Користувачі, що увійшли в систему.",
"rcfilters-filter-unregistered-label": "Незареєстровані",
"rcfilters-filter-unregistered-description": "Користувачі, які не ввійшли в систему.",
- "rcfilters-filter-unregistered-conflicts-user-experience-level": "ФÑ\96лÑ\8cÑ\82Ñ\80 «Ð\9dезаÑ\80еÑ\94Ñ\81Ñ\82Ñ\80ованÑ\96» неакÑ\82ивний, оÑ\81кÑ\96лÑ\8cки його вплив нÑ\96велÑ\8eÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f {{PLURAL:$2|таким фільтром|такими фільтрами}} досвіду, {{PLURAL:$2|який знаходить|які знаходять}} лише зареєстрованих користувачів: $1",
+ "rcfilters-filter-unregistered-conflicts-user-experience-level": "Цей Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80 конÑ\84лÑ\96кÑ\82Ñ\83Ñ\94 з {{PLURAL:$2|таким фільтром|такими фільтрами}} досвіду, {{PLURAL:$2|який знаходить|які знаходять}} лише зареєстрованих користувачів: $1",
"rcfilters-filtergroup-authorship": "Авторство редагувань",
"rcfilters-filter-editsbyself-label": "Ваші власні редагування",
"rcfilters-filter-editsbyself-description": "Редагування, зроблені Вами.",
"rcfilters-filter-editsbyother-label": "Редагування, зроблені іншими",
"rcfilters-filter-editsbyother-description": "Редагування, виконані іншими користувачами (не Вами).",
"rcfilters-filtergroup-userExpLevel": "Рівень досвіду (тільки для зареєстрованих користувачів)",
- "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "Цей Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80 неакÑ\82ивний, оÑ\81кÑ\96лÑ\8cки вÑ\96н знаÑ\85одиÑ\82Ñ\8c лиÑ\88е заÑ\80еÑ\94Ñ\81Ñ\82Ñ\80ованиÑ\85 коÑ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в, Ñ\82ож Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80 «Ð\9dезаÑ\80еÑ\94Ñ\81Ñ\82Ñ\80ованÑ\96» нÑ\96велÑ\8eÑ\94 його вплив.",
- "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "ФÑ\96лÑ\8cÑ\82Ñ\80 «Ð\9dезаÑ\80еÑ\94Ñ\81Ñ\82Ñ\80ованÑ\96» пеÑ\80ебÑ\83ваÑ\94 в конÑ\84лÑ\96кÑ\82Ñ\96 з одним або бÑ\96лÑ\8cÑ\88е Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80Ñ\96в доÑ\81вÑ\96дÑ\83. ФÑ\96лÑ\8cÑ\82Ñ\80и доÑ\81вÑ\96дÑ\83 знаÑ\85одÑ\8fÑ\82Ñ\8c лиÑ\88е заÑ\80еÑ\94Ñ\81Ñ\82Ñ\80ованиÑ\85 коÑ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в. Ð\9aонÑ\84лÑ\96кÑ\82нÑ\96 Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80и познаÑ\87енÑ\96 виÑ\89е Ñ\8fк неакÑ\82ивнÑ\96.",
+ "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "ФÑ\96лÑ\8cÑ\82Ñ\80и доÑ\81вÑ\96дÑ\83 знаÑ\85одÑ\8fÑ\82Ñ\8c лиÑ\88е заÑ\80еÑ\94Ñ\81Ñ\82Ñ\80ованиÑ\85 коÑ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в, Ñ\82ож Ñ\86ей Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80 конÑ\84лÑ\96кÑ\82Ñ\83Ñ\94 з Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80ом «Ð\9dезаÑ\80еÑ\94Ñ\81Ñ\82Ñ\80ованÑ\96».",
+ "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "ФÑ\96лÑ\8cÑ\82Ñ\80 «Ð\9dезаÑ\80еÑ\94Ñ\81Ñ\82Ñ\80ованÑ\96» конÑ\84лÑ\96кÑ\82Ñ\83Ñ\94 з одним або бÑ\96лÑ\8cÑ\88е Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80ами доÑ\81вÑ\96дÑ\83, Ñ\8fкÑ\96 знаÑ\85одÑ\8fÑ\82Ñ\8c лиÑ\88е заÑ\80еÑ\94Ñ\81Ñ\82Ñ\80ованиÑ\85 коÑ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в. Ð\9aонÑ\84лÑ\96кÑ\82нÑ\96 Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80и познаÑ\87енÑ\96 виÑ\89е в дÑ\96лÑ\8fнÑ\86Ñ\96 акÑ\82ивниÑ\85 Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80Ñ\96в.",
"rcfilters-filter-user-experience-level-newcomer-label": "Новачки",
"rcfilters-filter-user-experience-level-newcomer-description": "Менше ніж 10 редагувань і 4 дні активності.",
"rcfilters-filter-user-experience-level-learner-label": "Учні",
"rcfilters-filter-categorization-description": "Записи про додавання або вилучення сторінок з категорій.",
"rcfilters-filter-logactions-label": "Журнальні дії",
"rcfilters-filter-logactions-description": "Адміністративні дії, створення облікових записів, видалення сторінок, завантаження файлів тощо.",
+ "rcfilters-hideminor-conflicts-typeofchange-global": "Фільтр «Незначні редагування» конфліктує з одним або більше фільтрів за типом змін, оскільки певні типи змін не можна позначити як «незначні». Конфліктні фільтри позначені в ділянці активних фільтрів угорі.",
+ "rcfilters-hideminor-conflicts-typeofchange": "Певні типи змін не можна позначити як «незначні», тож цей фільтр конфліктує з такими фільтрами за типом змін: $1",
+ "rcfilters-typeofchange-conflicts-hideminor": "Цей фільтр за типом змін конфліктує з фільтром «Незначні редагування». Певні типи змін не можна позначати як «незначні».",
"rcnotefrom": "Нижче знаходяться {{PLURAL:$5|редагування}} з <strong>$3, $4</strong> (відображено до <strong>$1</strong>).",
"rclistfrom": "Показати редагування починаючи з $3 $2.",
"rcshowhideminor": "$1 незначні редагування",
"newimages-summary": "Ця спеціальна сторінка показує останні завантажені файли.",
"newimages-legend": "Фільтр",
"newimages-label": "Назва файлу (або її частина):",
+ "newimages-user": "IP-адреса або ім'я користувача.",
"newimages-showbots": "Показати завантаження ботами",
"newimages-hidepatrolled": "Приховати відпатрульовані завантаження",
"noimages": "Файли відсутні.",
"restrictionsfield-label": "Дозволені діапазони IP-адрес:",
"restrictionsfield-help": "Одна IP-адреса або CIDR-діапазон на рядок. Щоб увімкнути все, використайте:<pre>0.0.0.0/0\n::/0</pre>",
"revid": "версія $1",
- "pageid": "ID сторінки $1"
+ "pageid": "ID сторінки $1",
+ "rawhtml-notallowed": "Теги <html> не можна використовувати за межами звичайних сторінок."
}
"restrictionsfield-label": "允许的IP段:",
"restrictionsfield-help": "每行一个IP地址或CIDR段。要启用任何地址或地址段,可使用:<pre>0.0.0.0/0\n::/0</pre>",
"revid": "修订版本$1",
- "pageid": "页面ID$1"
+ "pageid": "页面ID$1",
+ "rawhtml-notallowed": "<html>标签不能在一般页面以外使用。"
}
<?php
+use MediaWiki\Session\SessionManager;
+
class FauxRequestTest extends PHPUnit_Framework_TestCase {
/**
* @covers FauxRequest::__construct
$req = new FauxRequest( [], false, 'x' );
}
+ /**
+ * @covers FauxRequest::__construct
+ */
+ public function testConstructWithSession() {
+ $session = SessionManager::singleton()->getEmptySession( new FauxRequest( [] ) );
+ $this->assertInstanceOf(
+ FauxRequest::class,
+ new FauxRequest( [], false, $session )
+ );
+ }
+
/**
* @covers FauxRequest::getText
*/
/**
* @covers Html::element
+ * @covers Html::rawElement
+ * @covers Html::openElement
+ * @covers Html::closeElement
*/
public function testElementBasics() {
$this->assertEquals(
/**
* @covers Html::namespaceSelector
+ * @covers Html::namespaceSelectorOptions
*/
public function testNamespaceSelector() {
$this->assertEquals(
--- /dev/null
+<?php
+
+class ObjectCacheTest extends MediaWikiTestCase {
+
+ protected function setUp() {
+ // Parent calls ObjectCache::clear() among other things
+ parent::setUp();
+
+ $this->setCacheConfig();
+ $this->setMwGlobals( [
+ 'wgMainCacheType' => CACHE_NONE,
+ 'wgMessageCacheType' => CACHE_NONE,
+ 'wgParserCacheType' => CACHE_NONE,
+ ] );
+ }
+
+ private function setCacheConfig( $arr = [] ) {
+ $defaults = [
+ CACHE_NONE => [ 'class' => 'EmptyBagOStuff' ],
+ CACHE_DB => [ 'class' => 'SqlBagOStuff' ],
+ CACHE_ANYTHING => [ 'factory' => 'ObjectCache::newAnything' ],
+ // Mock ACCEL with 'hash' as being installed.
+ // This makes tests deterministic regardless of APC.
+ CACHE_ACCEL => [ 'class' => 'HashBagOStuff' ],
+ 'hash' => [ 'class' => 'HashBagOStuff' ],
+ ];
+ $this->setMwGlobals( 'wgObjectCaches', $arr + $defaults );
+ }
+
+ /** @covers ObjectCache::newAnything */
+ public function testNewAnythingNothing() {
+ $this->assertInstanceOf(
+ SqlBagOStuff::class,
+ ObjectCache::newAnything( [] ),
+ 'No available types. Fallback to DB'
+ );
+ }
+
+ /** @covers ObjectCache::newAnything */
+ public function testNewAnythingHash() {
+ $this->setMwGlobals( [
+ 'wgMainCacheType' => 'hash'
+ ] );
+
+ $this->assertInstanceOf(
+ HashBagOStuff::class,
+ ObjectCache::newAnything( [] ),
+ 'Use an available type (hash)'
+ );
+ }
+
+ /** @covers ObjectCache::newAnything */
+ public function testNewAnythingAccel() {
+ $this->setMwGlobals( [
+ 'wgMainCacheType' => CACHE_ACCEL
+ ] );
+
+ $this->assertInstanceOf(
+ HashBagOStuff::class,
+ ObjectCache::newAnything( [] ),
+ 'Use an available type (CACHE_ACCEL)'
+ );
+ }
+
+ /** @covers ObjectCache::newAnything */
+ public function txestNewAnythingNoAccel() {
+ $this->setMwGlobals( [
+ 'wgMainCacheType' => CACHE_ACCEL
+ ] );
+
+ $this->setCacheConfig( [
+ // Mock APC not being installed (T160519, T147161)
+ CACHE_ACCEL => [ 'class' => 'EmptyBagOStuff' ]
+ ] );
+
+ $this->assertInstanceOf(
+ SqlBagOStuff::class,
+ ObjectCache::newAnything( [] ),
+ 'Fallback to DB if available types fall back to Empty'
+ );
+ }
+}
'script' => "var a = 'this is';\n {\ninvalid"
] );
$this->assertEquals(
- $module->getScript( $context ),
'mw.log.error(' .
'"JavaScript parse error: Parse error: Unexpected token; ' .
'token } expected in file \'input\' on line 3"' .
');',
+ $module->getScript( $context ),
'Replace invalid syntax with error logging'
);
'script' => "\n'valid';"
] );
$this->assertEquals(
- $module->getScript( $context ),
"\n'valid';",
+ $module->getScript( $context ),
'Leave valid scripts as-is'
);
}
'../skins/Example/images/quux.png',
];
$this->assertEquals(
- $getRelativePaths->invoke( null, $raw ),
$canonical,
+ $getRelativePaths->invoke( null, $raw ),
'Insert placeholders'
);
$this->assertEquals(
- $expandRelativePaths->invoke( null, $canonical ),
$raw,
+ $expandRelativePaths->invoke( null, $canonical ),
'Substitute placeholders'
);
}
$this->assertEquals( $expected, $module->getTitleInfo( $context ), 'Title info' );
}
+ /**
+ * @covers ResourceLoaderWikiModule::preloadTitleInfo
+ */
+ public function testGetPreloadedBadTitle() {
+ // Mock values
+ $pages = [
+ // Covers else branch for invalid page name
+ '[x]' => [ 'type' => 'styles' ],
+ ];
+ $titleInfo = [];
+
+ // Set up objects
+ $module = $this->getMockBuilder( 'TestResourceLoaderWikiModule' )
+ ->setMethods( [ 'getPages' ] ) ->getMock();
+ $module->method( 'getPages' )->willReturn( $pages );
+ $module::$returnFetchTitleInfo = $titleInfo;
+ $rl = new EmptyResourceLoader();
+ $rl->register( 'testmodule', $module );
+ $context = new ResourceLoaderContext( $rl, new FauxRequest() );
+
+ // Act
+ TestResourceLoaderWikiModule::preloadTitleInfo(
+ $context,
+ wfGetDB( DB_REPLICA ),
+ [ 'testmodule' ]
+ );
+
+ // Assert
+ $module = TestingAccessWrapper::newFromObject( $module );
+ $this->assertEquals( $titleInfo, $module->getTitleInfo( $context ), 'Title info' );
+ }
+
+ /**
+ * @covers ResourceLoaderWikiModule::preloadTitleInfo
+ */
+ public function testGetPreloadedTitleInfoEmpty() {
+ $context = new ResourceLoaderContext( new EmptyResourceLoader(), new FauxRequest() );
+ // Covers early return
+ $this->assertSame(
+ null,
+ ResourceLoaderWikiModule::preloadTitleInfo(
+ $context,
+ wfGetDB( DB_REPLICA ),
+ []
+ )
+ );
+ }
+
+ public static function provideGetContent() {
+ return [
+ 'Bad title' => [ null, '[x]' ],
+ 'Dead redirect' => [ null, [
+ 'text' => 'Dead redirect',
+ 'title' => 'Dead_redirect',
+ 'redirect' => 1,
+ ] ],
+ 'Bad content model' => [ null, [
+ 'text' => 'MediaWiki:Wikitext',
+ 'ns' => NS_MEDIAWIKI,
+ 'title' => 'Wikitext',
+ ] ],
+ 'No JS content found' => [ null, [
+ 'text' => 'MediaWiki:Script.js',
+ 'ns' => NS_MEDIAWIKI,
+ 'title' => 'Script.js',
+ ] ],
+ 'No CSS content found' => [ null, [
+ 'text' => 'MediaWiki:Styles.css',
+ 'ns' => NS_MEDIAWIKI,
+ 'title' => 'Script.css',
+ ] ],
+ ];
+ }
+
+ /**
+ * @covers ResourceLoaderWikiModule::getContent
+ * @dataProvider provideGetContent
+ */
+ public function testGetContent( $expected, $title ) {
+ $context = $this->getResourceLoaderContext( [], new EmptyResourceLoader );
+ $module = $this->getMockBuilder( 'ResourceLoaderWikiModule' )
+ ->setMethods( [ 'getContentObj' ] ) ->getMock();
+ $module->expects( $this->any() )
+ ->method( 'getContentObj' )->willReturn( null );
+
+ if ( is_array( $title ) ) {
+ $title += [ 'ns' => NS_MAIN, 'id' => 1, 'len' => 1, 'redirect' => 0 ];
+ $titleText = $title['text'];
+ // Mock Title db access via LinkCache
+ MediaWikiServices::getInstance()->getLinkCache()->addGoodLinkObj(
+ $title['id'],
+ new TitleValue( $title['ns'], $title['title'] ),
+ $title['len'],
+ $title['redirect']
+ );
+ } else {
+ $titleText = $title;
+ }
+
+ $module = TestingAccessWrapper::newFromObject( $module );
+ $this->assertEquals(
+ $expected,
+ $module->getContent( $titleText )
+ );
+
+ }
+
/**
* @covers ResourceLoaderWikiModule::getContent
*/