def test_for_generating_many_sections(self):
		self.builder =  GrammarFileBuilder(
							MockedFileWriter(''), 
							{ 
								"Users" :
								{ 
									"ModuleLongName" : "",
									"ModuleShortName" : "",								
									"ModulePrefix" : "users",
									"T" : 
									{
										"A" :
										{
											"Name" : "",
											"Value" : "VALUE",
											"Test" : "A"
										}
									}
								}
							}, 
							{ 
								"T-T" : "${Value}_${Test}:\n${Test}"
							}, 
							"#ForEachModule_CreateEntriesOnly_T-T AAA #ForEachModule_CreateEntriesOnly_T-T",
							MockedConsole()
						)
		
		self.builder.generate()
		
		generatedValue = "VALUE_A:\nA AAA VALUE_A:\nA"
		assert self.builder.writer.buffer == generatedValue, "Invalid value generated."		
	def setUpBuilder(self, modules = '', templates = '', base = ''):
		self.builder =  GrammarFileBuilder(
							MockedFileWriter(''), 
							modules, 
							templates, 
							base, 
							MockedConsole()
						)
class TestClass(unittest.TestCase):
	def iterateMatches(self, text, validMatches):
		i = 0
		for match in self.builder.findAllSections(text):
			assert match.group(1) == validMatches[i], "Invalid match for findAllSections algorithm."
			i += 1

		assert len(validMatches) == i, "Invalid count of matches found."

	def setUpBuilder(self, modules = '', templates = '', base = ''):
		self.builder =  GrammarFileBuilder(
							MockedFileWriter(''), 
							modules, 
							templates, 
							base, 
							MockedConsole()
						)

	def test_simple_test_for_simple_creation(self):
		self.setUpBuilder('', '', 'PASSED VALUE')

		assert self.builder != None, "You can't create Grammar file builder."

	def test_for_generating(self):
		self.builder =  GrammarFileBuilder(
							MockedFileWriter(''), 
							{ "Users" :
								{ 
									"ModuleLongName" : "",
									"ModuleShortName" : "",								
									"ModulePrefix" : "users",
									"Template" : 
									{
										"A" :
										{
											"Name" : "",
											"Value" : "VALUE",
											"Test" : "A"
										}
									}
								}
							}, 
							{ 
								"Template-Test" : "${Value}_${Test}:\n${Test}"
							}, 
							"#ForEachModule_CreateEntriesOnly_Template-Test",
							MockedConsole()
						)
		
		self.builder.generate()
		
		generatedValue = "VALUE_A:\nA"
		assert self.builder.writer.buffer == generatedValue, "Invalid value generated."

	def test_for_generating_many_sections(self):
		self.builder =  GrammarFileBuilder(
							MockedFileWriter(''), 
							{ 
								"Users" :
								{ 
									"ModuleLongName" : "",
									"ModuleShortName" : "",								
									"ModulePrefix" : "users",
									"T" : 
									{
										"A" :
										{
											"Name" : "",
											"Value" : "VALUE",
											"Test" : "A"
										}
									}
								}
							}, 
							{ 
								"T-T" : "${Value}_${Test}:\n${Test}"
							}, 
							"#ForEachModule_CreateEntriesOnly_T-T AAA #ForEachModule_CreateEntriesOnly_T-T",
							MockedConsole()
						)
		
		self.builder.generate()
		
		generatedValue = "VALUE_A:\nA AAA VALUE_A:\nA"
		assert self.builder.writer.buffer == generatedValue, "Invalid value generated."		

	def test_for_catching_replacement_sections(self):
		self.setUpBuilder()
		self.iterateMatches("#SectionName", [ "SectionName" ])		

	def test_for_invalid_catching_replacement_sections(self):
		self.setUpBuilder()
		for match in self.builder.findAllSections("SectionName"):
			self.fail("Invalid match found.")

	def test_for_catching_replacement_more_complicated_section_names(self):
		self.setUpBuilder()
		self.iterateMatches("#ForEachModule_CreateEntriesOnly_Template-Test", 
							[ 
								"ForEachModule_CreateEntriesOnly_Template-Test"
							])
		self.iterateMatches("#a1_1 #b2_2", [ "a1_1", "b2_2" ])
		self.iterateMatches("asdf\n#QWERTYUIOPasdfghjkl1234567890_-ZXCVBnm\nasadf", 
							[ 
								"QWERTYUIOPasdfghjkl1234567890_-ZXCVBnm" 
							])

	def test_for_saving_data_only_on_end(self):
		value = 'PASSED VALUE'
		self.setUpBuilder('', '', value)
		assert self.builder.writer.buffer == "", "Buffer wasn't empty on start."

		self.builder.generate()
		assert self.builder.writer.buffer == value, "Buffer wasn't empty on start."