Lines Matching +full:provider +full:-

19         $this->registry = new ModeRegistry($conf['syntax']);
26 (new ModeRegistry('dw'))->getModes();
27 $this->assertIsArray($PARSER_MODES);
28 $this->assertArrayHasKey('container', $PARSER_MODES);
29 $this->assertArrayHasKey('formatting', $PARSER_MODES);
30 $this->assertArrayHasKey('substition', $PARSER_MODES);
31 $this->assertArrayHasKey('protected', $PARSER_MODES);
32 $this->assertArrayHasKey('disabled', $PARSER_MODES);
33 $this->assertArrayHasKey('paragraphs', $PARSER_MODES);
34 $this->assertArrayHasKey('baseonly', $PARSER_MODES);
43 $registry->getModes();
44 $this->assertSame($registry->getCategories(), $PARSER_MODES);
49 $this->assertSame('md+dw', (new ModeRegistry('md+dw'))->getSyntax());
54 $cats = $this->registry->getCategories();
55 $this->assertArrayHasKey('container', $cats);
56 $this->assertArrayHasKey('formatting', $cats);
57 $this->assertArrayHasKey('baseonly', $cats);
62 $modes = $this->registry->getModesForCategories([ModeRegistry::CATEGORY_CONTAINER]);
63 $this->assertContains('listblock', $modes);
64 $this->assertContains('table', $modes);
65 $this->assertContains('gfm_quote', $modes);
66 $this->assertContains('gfm_hr', $modes);
71 $modes = $this->registry->getModesForCategories([
75 $this->assertContains('listblock', $modes);
76 $this->assertContains('header', $modes);
81 $modes = $this->registry->getModesForCategories([
87 $this->assertEquals(1, $count);
93 $modes = $this->registry->getModesForCategories(['nonexistent']);
94 $this->assertSame([], $modes);
99 $this->registry->registerMode(ModeRegistry::CATEGORY_CONTAINER, 'testmode');
100 $this->assertContains(
102 $this->registry->getModesForCategories([ModeRegistry::CATEGORY_CONTAINER])
109 $this->registry->registerMode(ModeRegistry::CATEGORY_CONTAINER, 'leaktest');
111 $this->assertNotContains(
113 $other->getModesForCategories([ModeRegistry::CATEGORY_CONTAINER])
119 $modes = $this->registry->getModes();
120 $this->assertNotEmpty($modes);
125 $this->assertSame($sorted, $sortValues);
130 $modes = $this->registry->getModes();
132 $this->assertArrayHasKey('sort', $entry);
133 $this->assertArrayHasKey('mode', $entry);
134 $this->assertArrayHasKey('obj', $entry);
135 $this->assertIsInt($entry['sort']);
136 $this->assertIsString($entry['mode']);
137 $this->assertInstanceOf(AbstractMode::class, $entry['obj']);
143 $modes = (new ModeRegistry('dw'))->getModes();
145 $this->assertContains('strong', $modeNames);
146 $this->assertContains('header', $modeNames);
147 $this->assertContains('listblock', $modeNames);
148 $this->assertContains('eol', $modeNames);
149 $this->assertContains('smiley', $modeNames);
150 $this->assertContains('acronym', $modeNames);
151 $this->assertContains('entity', $modeNames);
158 $this->assertLessThan(0, ModeRegistry::sortModes($a, $b));
159 $this->assertGreaterThan(0, ModeRegistry::sortModes($b, $a));
160 $this->assertEquals(0, ModeRegistry::sortModes($a, $a));
165 $this->assertSame([], $this->registry->getBlockEolModes());
170 $this->registry->registerBlockEolMode('listblock');
171 $this->registry->registerBlockEolMode('table');
172 $this->assertSame(['listblock', 'table'], $this->registry->getBlockEolModes());
177 $this->registry->registerBlockEolMode('listblock');
179 $this->assertSame([], $fresh->getBlockEolModes());
184 * the syntax setting was introduced (no-op guarantee).
188 $modes = (new ModeRegistry('dw'))->getModes();
191 // All original built-in modes must be present (with `quote`
205 $this->assertContains($mode, $modeNames, "Mode '$mode' missing in dw syntax setting");
209 /** DW-only modes must be absent when syntax is 'md' */
212 $modes = (new ModeRegistry('md'))->getModes();
221 … $this->assertNotContains($mode, $modeNames, "DW mode '$mode' should not load in md-only mode");
225 /** Always-loaded modes must still be present in md-only mode */
228 $modes = (new ModeRegistry('md'))->getModes();
239 …$this->assertContains($mode, $modeNames, "Always-loaded mode '$mode' missing in md syntax setting"…
244 * preference-gated — see provideModeLoadingCases for the per-mode rules) */
247 // DW modes that load in both dw+md and md+dw (no MD-side conflict)
255 $modes = (new ModeRegistry($syntax))->getModes();
259 … $this->assertContains($mode, $modeNames, "DW mode '$mode' missing in '$syntax' syntax setting");
267 * per-parse value, not shared global state.
271 $dw = array_column((new ModeRegistry('dw'))->getModes(), 'mode');
272 $md = array_column((new ModeRegistry('md'))->getModes(), 'mode');
274 $this->assertContains('internallink', $dw);
275 $this->assertNotContains('internallink', $md);
276 $this->assertContains('gfm_emphasis', $md);
277 $this->assertNotContains('gfm_emphasis', $dw);
282 $parser = $this->registry->acquireSubParser();
283 $this->assertInstanceOf(Parser::class, $parser);
284 $this->registry->releaseSubParser();
292 $first = $this->registry->acquireSubParser();
293 $this->registry->releaseSubParser();
294 $second = $this->registry->acquireSubParser();
295 $this->registry->releaseSubParser();
296 $this->assertSame($first, $second);
303 // instance — the pool grows on demand to support re-entrancy.
304 $outer = $this->registry->acquireSubParser();
305 $inner = $this->registry->acquireSubParser();
307 $this->assertNotSame($outer, $inner);
309 $this->registry->releaseSubParser();
310 $this->registry->releaseSubParser();
317 $this->registry->withSubParser([], [], static function () {
325 $first = $this->registry->acquireSubParser([], []);
326 $this->registry->releaseSubParser([], []);
327 $second = $this->registry->acquireSubParser([], []);
328 $this->registry->releaseSubParser([], []);
329 $this->assertSame($first, $second);
336 $parser = $registry->acquireSubParser();
338 $parser->parse("# A header\n");
340 $names = array_column($parser->getHandler()->calls, 0);
341 $this->assertNotContains('header', $names);
342 $this->assertNotContains('section_open', $names);
344 $registry->releaseSubParser();
357 $parser = $registry->acquireSubParser($excludes);
359 $parser->parse("*foo*\n");
360 $names = array_column($parser->getHandler()->calls, 0);
361 $this->assertNotContains('emphasis_open', $names);
363 $registry->releaseSubParser($excludes);
369 $first = $this->registry->acquireSubParser();
370 $this->registry->releaseSubParser();
372 $second = $other->acquireSubParser();
373 $other->releaseSubParser();
374 $this->assertNotSame($first, $second);
380 // the main parser's lexer to each mode. The sub-parser must then clone
383 $main = $this->registry->getModes();
384 $mainParser = new Parser(new Handler($this->registry), $this->registry);
386 $mainParser->addMode($m['mode'], $m['obj']);
391 $this->assertNotNull(
392 $m['obj']->getLexer(),
395 $mainLexers[$m['mode']] = $m['obj']->getLexer();
398 $this->registry->acquireSubParser();
399 $this->registry->releaseSubParser();
402 $this->assertSame(
404 $m['obj']->getLexer(),
405 "sub-parser must not clobber main mode '{$m['mode']}'->Lexer"
414 * Add new mode-gating rules to {@see provideModeLoadingCases} — each
422 $modeNames = array_column((new ModeRegistry($syntax))->getModes(), 'mode');
425 $this->assertContains($mode, $modeNames, "$mode must load in '$syntax'");
427 $this->assertNotContains($mode, $modeNames, "$mode must NOT load in '$syntax'");
432 * Data provider for {@see testModeLoadingBySyntax}.
441 * - **Always**: loaded unconditionally (no syntax-specific counterpart
442 * or conflict). Covers core formatting, paragraphs, and data-driven
444 * - **DW-always**: loaded whenever DokuWiki is part of the syntax. Used
447 * - **DW-preferred**: loaded only when DokuWiki is the primary syntax.
448 * Used when the delimiter conflicts with a Markdown mode in MD-
450 * - **MD-always**: mirror — loaded whenever Markdown is part of the
453 * - **MD-preferred**: mirror — loaded only when Markdown is primary.
454 * Used when the delimiter conflicts with a DokuWiki mode in DW-
457 * Add a new line to the `$rules` table to register additional mode-
461 * test-case label to [mode name, syntax setting, should-load]
466 // Always-loaded (unconditional — no syntax-specific counterpart)
484 // DW-always (features with MD counterparts but no delimiter clash)
497 // MD-always (`*` / `~~` have no conflicting DW counterpart)
511 // MD-preferred (`_`, `__`, `___` clash with Underline in DW)
516 // DW-preferred (Underline's `__` clashes with GFM strong)