* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
class phpbb_textformatter_s9e_bbcode_merger_test extends phpbb_test_case
{
	/**
	* @dataProvider get_merge_bbcodes_tests
	*/
	public function test_merge_bbcodes($usage_without, $template_without, $usage_with, $template_with, $expected_usage, $expected_template)
	{
		$container     = $this->get_test_case_helpers()->set_s9e_services();
		$factory       = $container->get('text_formatter.s9e.factory');
		$bbcode_merger = new \phpbb\textformatter\s9e\bbcode_merger($factory);
		$without = ['usage' => $usage_without, 'template' => $template_without];
		$with    = ['usage' => $usage_with,    'template' => $template_with];
		$merged  = $bbcode_merger->merge_bbcodes($without, $with);
		// Normalize the expected template's whitespace to match the default indentation
		$expected_template = str_replace("\n\t\t\t\t", "\n", $expected_template);
		$expected_template = str_replace("\t",         '  ', $expected_template);
		$this->assertSame($expected_usage,    $merged['usage']);
		$this->assertSame($expected_template, $merged['template']);
	}
	public function get_merge_bbcodes_tests()
	{
		return [
			[
				'[x]{TEXT}[/x]',
				'{TEXT}',
				'[x={TEXT1}]{TEXT}[/x]',
				'{TEXT}',
				'[x={TEXT1?}]{TEXT}[/x]',
				'
					
						
							
						
					
					
				'
			],
			[
				// The tokens' numbering differs between versions
				'[x]{TEXT}[/x]',
				'{TEXT}',
				'[x={TEXT1}]{TEXT2}[/x]',
				'{TEXT2}',
				'[x={TEXT1?}]{TEXT2}[/x]',
				'
					
						
							
						
					
					
				'
			],
			[
				'[x]{URL}[/x]',
				'{URL}',
				'[x={URL}]{TEXT}[/x]',
				'{TEXT}',
				'[x={URL;useContent}]{TEXT}[/x]',
				'
					
				'
			],
			[
				'[x]{URL}[/x]',
				'{L_GO_TO}: {URL}',
				'[x={URL}]{TEXT}[/x]',
				'{L_GO_TO}: {TEXT}',
				'[x={URL;useContent}]{TEXT}[/x]',
				'{L_GO_TO}: '
			],
			[
				// Test that unsafe BBCodes can still be merged
				'[script]{TEXT}[/script]',
				'',
				'[script={TEXT1}]{TEXT2}[/script]',
				'',
				'[script={TEXT1?}]{TEXT2}[/script]',
				''
			],
			[
				// https://www.phpbb.com/community/viewtopic.php?p=14848281#p14848281
				'[note]{TEXT}[/note]',
				'{TEXT}',
				'[note={TEXT1}]{TEXT2}[/note]',
				'{TEXT1}{TEXT2}',
				'[note={TEXT1?}]{TEXT2}[/note]',
				'
					
						
					
				
				
				
					
				'
			],
			[
				// https://www.phpbb.com/community/viewtopic.php?p=14768441#p14768441
				'[MI]{TEXT}[/MI]',
				'MI: {TEXT}',
				'[MI={TEXT2}]{TEXT1}[/MI]',
				'MI for: "{TEXT2}": {TEXT1}',
				'[MI={TEXT2?}]{TEXT1}[/MI]',
				'MI for: "":
				 
				
					
				'
			],
			[
				// https://www.phpbb.com/community/viewtopic.php?p=14700506#p14700506
				'[spoiler]{TEXT}[/spoiler]',
				' {TEXT}',
				'[spoiler={TEXT1}]{TEXT2}[/spoiler]',
				'
 {TEXT1}{TEXT2}
',
				'[spoiler={TEXT1?}]{TEXT2}[/spoiler]',
				'
					
						
							
								 
								
							
							
						
					
					
						
							 
							
						
					
				'
			],
			[
				// https://www.phpbb.com/community/viewtopic.php?p=14859676#p14859676
				'[AE]{TEXT}[/AE]',
				'
					| 
					  
						| 
							
							  | ACTIVE EFFECTS & CONDITIONS |  |  
							  |  |  |  | 
				
				 
',
				'[AE={TEXT1}]{TEXT2}[/AE]',
				'
				 
',
				'[AE={TEXT1?}]{TEXT2}[/AE]',
				'
					
						| 
								
									| 
											
												| ACTIVE EFFECTS & CONDITIONS |  |  
												|  |  |  | 
				
				 
'
			],
			[
				// https://www.phpbb.com/community/viewtopic.php?f=438&t=2530451
				'[issue]{NUMBER}[/issue]',
				' Issue #{NUMBER}',
				'[issue={SIMPLETEXT}]{NUMBER}[/issue]',
				' Issue #{NUMBER} ({SIMPLETEXT})',
				'[issue={SIMPLETEXT?}]{NUMBER}[/issue]',
				'
					
						//issues/ Issue # ()
						/default/issues/ Issue #
					
				'
			],
		];
	}
}