def test_which_handles_resolving_simple_template(self):
		templatesRepository = { "SampleTemplate" : 'Simple ${test}' }
		resolver = TemplateResolver(templatesRepository, "SampleTemplate")

		data = {}
		data["test"] = "TEST!"
		content = resolver.fill(data)

		assert content == 'Simple TEST!', "Template wasn't resolved properly."
	def test_which_handles_inproper_data_dictionary_without_some_parameters(self):
		templatesRepository = { "SampleTemplate" : '${first} ${second} ${third}' }
		resolver = TemplateResolver(templatesRepository, "SampleTemplate")

		data = {}
		data["first"] = "FIRST"
		data["third"] = "THIRD"
		content = resolver.fill(data)

		assert content == "FIRST ${second} THIRD", "Template wasn't resolved properly."
class OnlyBooleanEntriesPopulator(IElementPopulator):
	def __init__(self, sectionName, templates, settingsObject):
		self.name = sectionName
		self.templates = templates
		self.parameters = settingsObject

		self.templateName = sectionName.split('_')[-1]
		nameElements = self.templateName.split('-')

		self.settingName = nameElements[0]
		self.fieldName = nameElements[1]

		self.separator = ",\n"

	def getType(self):
		return "CreateBooleanEntriesOnly"

	def populate(self):
		result = []

		for parameterName, parameter in self.parameters[self.settingName].iteritems():
			for attributeName, attribute in parameter.iteritems():
				if attributeName == self.fieldName:
					nameForResolving = self.templateName + "$%r" % (attribute)
					expanded = self.expandParameters(parameter)

					self.templateResolver = TemplateResolver(self.templates, nameForResolving)
					result.append(self.templateResolver.fill(expanded))

		return self.separator.join(result)
	def populate(self):
		result = []

		for parameterName, parameter in self.parameters[self.settingName].iteritems():
			for attributeName, attribute in parameter.iteritems():
				if attributeName == self.fieldName:
					nameForResolving = self.templateName + "$%r" % (attribute)
					expanded = self.expandParameters(parameter)

					self.templateResolver = TemplateResolver(self.templates, nameForResolving)
					result.append(self.templateResolver.fill(expanded))

		return self.separator.join(result)
class IElementForStg(object):
	def __init__(self, templates, settingsObject):
		self.templatesRepository = templates
		self.settingsObject = settingsObject
		self.templateResolver = TemplateResolver(self.templatesRepository, self.getTemplateName())

	def getType(self):
		raise NotImplementedError("IElementForStg is an abstract class.")

	def getTemplateName(self):
		raise NotImplementedError("IElementForStg is an abstract class.")

	def resolve(self):
		return self.templateResolver.fill(self.settingsObject)
	def __init__(self, sectionName, templates, settingsObject):
		self.name = sectionName
		self.templates = templates
		self.parameters = settingsObject

		splittedSectionName = sectionName.split('_')[-1]
		splittedTemplateName = splittedSectionName.split('-')

		self.templateName = splittedTemplateName[0]
		self.settingName = splittedTemplateName[1]

		if not self.templates.has_key(self.templateName):
			messageArguments = (self.templateName, self.name)
			raise AttributeError("Missing template (%s) for specified section '%s'" % messageArguments)

		self.templateResolver = TemplateResolver(self.templates, self.templateName)	
		self.separator = "|\n"
class ParameterListPopulator(IElementPopulator):
	def __init__(self, sectionName, templates, settingsObject):
		self.name = sectionName
		self.templates = templates
		self.parameters = settingsObject

		splittedSectionName = sectionName.split('_')[-1]
		splittedTemplateName = splittedSectionName.split('-')

		self.templateName = splittedTemplateName[0]
		self.settingName = splittedTemplateName[1]

		if not self.templates.has_key(self.templateName):
			messageArguments = (self.templateName, self.name)
			raise AttributeError("Missing template (%s) for specified section '%s'" % messageArguments)

		self.templateResolver = TemplateResolver(self.templates, self.templateName)	
		self.separator = "|\n"

	def getType(self):
		return "CreateParametersListWithName"

	def openClause(self):
		return self.parameters["ModulePrefix"] + "_" + self.settingName.lower() + ":\n"

	def closeClause(self):
		return "\n;"

	def populate(self):
		result = self.openClause()

		blocks = []
		for settingName, setting in self.parameters.iteritems():
			if settingName.find("Parameters") != -1:
				for parameterName, parameter in setting.iteritems():				
					blocks.append(self.templateResolver.fill(self.expandParameters(parameter)))

		result += self.separator.join(blocks)
		result += self.closeClause()

		return result
	def __init__(self, templates, settingsObject):
		self.templatesRepository = templates
		self.settingsObject = settingsObject
		self.templateResolver = TemplateResolver(self.templatesRepository, self.getTemplateName())