public void Constructor_CodeGeneratorOptions_AssignedToProperty()
		{
			CodeGeneratorOptions options = new CodeGeneratorOptions();
			ICodeGeneratorContext context = new CodeGeneratorContext(metadataSet, options);

			Assert.That(context.CodeGeneratorOptions, Is.EqualTo(options));
		}
		public void Build_CodeGeneratorContext_CodeCompileUnit()
		{
			ICodeGeneratorContext codeGeneratorContext = new CodeGeneratorContext(metadataSet, new CodeGeneratorOptions());
			ServiceContractGenerator contractGenerator = PerformBuild(codeGeneratorContext);

			Assert.That(contractGenerator.TargetCompileUnit, Is.EqualTo(codeGeneratorContext.CodeCompileUnit));
		}
		public void Build_CodeGeneratorContext_CodeCompileUnit()
		{
			ICodeGeneratorContext codeGeneratorContext = new CodeGeneratorContext(metadataSet, new CodeGeneratorOptions());
			IXsdDataContractImporterBuilder builder = new XsdDataContractImporterBuilder();
			XsdDataContractImporter importer = builder.Build(codeGeneratorContext);

			Assert.That(importer.CodeCompileUnit, Is.EqualTo(codeGeneratorContext.CodeCompileUnit));
		}
		public void Build_CodeGeneratorContext_CodeCompileUnit()
		{
			ICodeGeneratorContext codeGeneratorContext = new CodeGeneratorContext(metadataSet, new CodeGeneratorOptions());
			IXmlSerializerImportOptionsBuilder builder = new XmlSerializerImportOptionsBuilder();
			XmlSerializerImportOptions importOptions = builder.Build(codeGeneratorContext);

			Assert.That(importOptions.CodeCompileUnit, Is.EqualTo(codeGeneratorContext.CodeCompileUnit));
		}
		public void CodeDomProvider_CodeGeneratorOptions_Language()
		{
			CodeGeneratorOptions options = new CodeGeneratorOptions {CodeLanguage = CodeLanguage.CSharp};
			ICodeGeneratorContext context = new CodeGeneratorContext(metadataSet, options);

			Assert.That(context.CodeDomProvider, Is.InstanceOf<CSharpCodeProvider>());

			options = new CodeGeneratorOptions {CodeLanguage = CodeLanguage.VisualBasic};
			context = new CodeGeneratorContext(metadataSet, options);

			Assert.That(context.CodeDomProvider, Is.InstanceOf<VBCodeProvider>());
		}
		public void GenerateCode_CodeGeneratorOptions_ImportXmlTypes()
		{
			codeGeneratorOptions.ImportXmlTypes = false;
			ICodeGeneratorContext codeGeneratorContext = new CodeGeneratorContext(metadataSet, codeGeneratorOptions);

			XsdDataContractImporterBuilder xsdDataContractImporterBuilder = new XsdDataContractImporterBuilder();
			IDataContractGenerator dataContractGenerator = new DataContractGenerator(xsdDataContractImporterBuilder);

			Assert.Throws<InvalidDataContractException>(() => dataContractGenerator.GenerateCode(codeGeneratorContext));

			codeGeneratorOptions.ImportXmlTypes = true;
			CodeCompileUnit codeCompileUnit = dataContractGenerator.GenerateCode(codeGeneratorContext);

			Assert.That(codeCompileUnit.Namespaces, Has.Count.EqualTo(3));
		}
		public void Build_Options_CreatedByOptionsBuilder()
		{
			ICodeGeneratorContext codeGeneratorContext = new CodeGeneratorContext(metadataSet, new CodeGeneratorOptions());
			const ServiceContractGenerationOptions serviceContractGenerationOptions = new ServiceContractGenerationOptions();

			Mock<IServiceContractGenerationOptionsBuilder> generationOptionsBuilder = new Mock<IServiceContractGenerationOptionsBuilder>();
			generationOptionsBuilder.Setup(mock => mock.Build(codeGeneratorContext.CodeGeneratorOptions)).Returns(serviceContractGenerationOptions);

			IServiceContractGeneratorBuilder builder = new ServiceContractGeneratorBuilder(generationOptionsBuilder.Object);
			ServiceContractGenerator contractGenerator = builder.Build(codeGeneratorContext);

			Assert.That(contractGenerator.Options, Is.EqualTo(serviceContractGenerationOptions));

			generationOptionsBuilder.Verify();
		}
		public void GenerateCode_Builders_CalledWithContext()
		{
			ICodeGeneratorContext codeGeneratorContext = new CodeGeneratorContext(metadataSet, codeGeneratorOptions);

			Mock<IWsdlImporterBuilder> wsdlImportBuilder = new Mock<IWsdlImporterBuilder>();
			wsdlImportBuilder.Setup(mock => mock.Build(codeGeneratorContext))
				.Returns(new WsdlImporter(metadataSet)).AtMostOnce();

			Mock<IServiceContractGeneratorBuilder> contractGeneratorBuilder = new Mock<IServiceContractGeneratorBuilder>();
			Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
			contractGeneratorBuilder.Setup(mock => mock.Build(codeGeneratorContext))
				.Returns(new ServiceContractGenerator(codeGeneratorContext.CodeCompileUnit, configuration)).AtMostOnce();

			ICodeGenerator codeGenerator = new CodeGenerator(wsdlImportBuilder.Object, contractGeneratorBuilder.Object);
			codeGenerator.GenerateCode(codeGeneratorContext);

			wsdlImportBuilder.Verify();
			contractGeneratorBuilder.Verify();
		}
		private XsdDataContractImporter PerformBuild(CodeGeneratorOptions codeGeneratorOptions)
		{
			ICodeGeneratorContext codeGeneratorContext = new CodeGeneratorContext(metadataSet, codeGeneratorOptions);
			XsdDataContractImporterBuilder builder = new XsdDataContractImporterBuilder();
			return builder.Build(codeGeneratorContext);
		}
		private CodeCompileUnit GenerateCode(CodeGeneratorOptions options)
		{
			ICodeGeneratorContext codeGeneratorContext = new CodeGeneratorContext(metadataSet, options);

			WsdlImporterBuilder wsdlImporterBuilder = new WsdlImporterBuilder(
				new XmlSerializerImportOptionsBuilder(),
				new XsdDataContractImporterBuilder(),
				new WrappedOptionsBuilder(),
				new FaultImportOptionsBuilder());

			ServiceContractGeneratorBuilder contractGeneratorBuilder = new ServiceContractGeneratorBuilder(
				new ServiceContractGenerationOptionsBuilder());

			ICodeGenerator codeGenerator = new CodeGenerator(wsdlImporterBuilder, contractGeneratorBuilder);

			return codeGenerator.GenerateCode(codeGeneratorContext);
		}
		private XmlSerializerImportOptions PerformBuild(CodeGeneratorOptions codeGeneratorOptions)
		{
			ICodeGeneratorContext codeGeneratorContext = new CodeGeneratorContext(metadataSet, codeGeneratorOptions);
			IXmlSerializerImportOptionsBuilder builder = new XmlSerializerImportOptionsBuilder();
			return builder.Build(codeGeneratorContext);
		}
		public void Constructor_Metadata_AssignedToProperty()
		{
			ICodeGeneratorContext context = new CodeGeneratorContext(metadataSet, new CodeGeneratorOptions());

			Assert.That(context.MetadataSet, Is.EqualTo(metadataSet));
		}
		public void Constructor_CodeCompileUnit_Created()
		{
			ICodeGeneratorContext context = new CodeGeneratorContext(metadataSet, new CodeGeneratorOptions());

			Assert.That(context.CodeCompileUnit, Is.Not.Null);
		}