public void Build_CodeGeneratorOptions_GenerateProperties()
		{
			CodeGeneratorOptions options = new CodeGeneratorOptions {GenerateProperties = true};
			XmlSerializerImportOptions importOptions = PerformBuild(options);

			Assert.That(importOptions.WebReferenceOptions.CodeGenerationOptions, Is.EqualTo(CodeGenerationOptions.GenerateProperties));
		}
		public void Build_CodeGeneratorOptions_EnableDataBinding()
		{
			CodeGeneratorOptions options = new CodeGeneratorOptions {EnableDataBinding = true};
			XmlSerializerImportOptions importOptions = PerformBuild(options);

			Assert.That(importOptions.WebReferenceOptions.CodeGenerationOptions, Is.EqualTo(CodeGenerationOptions.EnableDataBinding));
		}
		/// <summary>
		/// Builds a new instance.
		/// </summary>
		/// <param name="codeGeneratorOptions">The code generator options.</param>
		/// <returns>
		/// A new <see cref="ServiceContractGenerationOptions"/> instance.
		/// </returns>
		public ServiceContractGenerationOptions Build(CodeGeneratorOptions codeGeneratorOptions)
		{
			ServiceContractGenerationOptions serviceContractGenerationOptions = new ServiceContractGenerationOptions();

			if (codeGeneratorOptions.AsyncMethods)
			{
				serviceContractGenerationOptions |= ServiceContractGenerationOptions.AsynchronousMethods;
				if (codeGeneratorOptions.TargetFrameworkVersion == TargetFrameworkVersion.Version35)
				{
					serviceContractGenerationOptions |= ServiceContractGenerationOptions.EventBasedAsynchronousMethods;
				}
			}

			if (codeGeneratorOptions.CodeGeneratorMode == CodeGeneratorMode.Client)
			{
				serviceContractGenerationOptions |= (ServiceContractGenerationOptions.ClientClass | ServiceContractGenerationOptions.ChannelInterface);
			}

			if (codeGeneratorOptions.InternalTypes)
			{
				serviceContractGenerationOptions |= ServiceContractGenerationOptions.InternalTypes;
			}

			if (codeGeneratorOptions.TypedMessages)
			{
				serviceContractGenerationOptions |= ServiceContractGenerationOptions.TypedMessages;
			}

			return serviceContractGenerationOptions;
		}
		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_CodeGeneratorOptions_NamespaceMappings()
		{
			const string expectedNamespace = "TestNamespace";
			Dictionary<string, string> mappings = new Dictionary<string, string> {{"*", expectedNamespace}};
			CodeGeneratorOptions options = new CodeGeneratorOptions {NamespaceMappings = mappings};
			XmlSerializerImportOptions importOptions = PerformBuild(options);

			Assert.That(importOptions.ClrNamespace, Is.EqualTo(expectedNamespace));
		}
		public void Build_CodeGeneratorOptions_Wrapped()
		{
			CodeGeneratorOptions options = new CodeGeneratorOptions {Wrapped = true};
			WrappedOptions wrappedOptions = PerformBuild(options);

			Assert.That(wrappedOptions.WrappedFlag, Is.True);

			options = new CodeGeneratorOptions {Wrapped = false};
			wrappedOptions = PerformBuild(options);

			Assert.That(wrappedOptions.WrappedFlag, Is.False);
		}
		public void Build_CodeGeneratorOptions_CodeGeneratorMode()
		{
			IServiceContractGenerationOptionsBuilder builder = new ServiceContractGenerationOptionsBuilder();

			CodeGeneratorOptions options = new CodeGeneratorOptions {CodeGeneratorMode = CodeGeneratorMode.Client};
			ServiceContractGenerationOptions contractOptions = builder.Build(options);
			Assert.That(contractOptions, Is.EqualTo(ServiceContractGenerationOptions.ClientClass | ServiceContractGenerationOptions.ChannelInterface));

			options = new CodeGeneratorOptions {CodeGeneratorMode = CodeGeneratorMode.Service};
			contractOptions = builder.Build(options);
			Assert.That(contractOptions, Is.EqualTo(ServiceContractGenerationOptions.None));
		}
		public void Build_CodeGeneratorOptions_AsyncMethods()
		{
			IServiceContractGenerationOptionsBuilder builder = new ServiceContractGenerationOptionsBuilder();

			CodeGeneratorOptions options = new CodeGeneratorOptions {AsyncMethods = true};
			ServiceContractGenerationOptions contractOptions = builder.Build(options);
			Assert.That(contractOptions, Is.EqualTo(ServiceContractGenerationOptions.AsynchronousMethods));

			options = new CodeGeneratorOptions {AsyncMethods = false};
			contractOptions = builder.Build(options);
			Assert.That(contractOptions, Is.EqualTo(ServiceContractGenerationOptions.None));
		}
		public void Build_CodeGeneratorOptions_InternalTypes()
		{
			CodeGeneratorOptions options = new CodeGeneratorOptions {InternalTypes = true};
			XsdDataContractImporter importer = PerformBuild(options);

			Assert.That(importer.Options.GenerateInternal, Is.True);

			options = new CodeGeneratorOptions {InternalTypes = false};
			importer = PerformBuild(options);

			Assert.That(importer.Options.GenerateInternal, Is.False);
		}
		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 Build_CodeGeneratorOptions_EnableDataBinding()
		{
			CodeGeneratorOptions options = new CodeGeneratorOptions {EnableDataBinding = true};
			XsdDataContractImporter importer = PerformBuild(options);

			Assert.That(importer.Options.EnableDataBinding, Is.True);

			options = new CodeGeneratorOptions {EnableDataBinding = false};
			importer = PerformBuild(options);

			Assert.That(importer.Options.EnableDataBinding, Is.False);
		}
		public void Build_CodeGeneratorOptions_InternalTypes()
		{
			IServiceContractGenerationOptionsBuilder builder = new ServiceContractGenerationOptionsBuilder();

			CodeGeneratorOptions options = new CodeGeneratorOptions {InternalTypes = true};
			ServiceContractGenerationOptions contractOptions = builder.Build(options);
			Assert.That(contractOptions, Is.EqualTo(ServiceContractGenerationOptions.InternalTypes));

			options = new CodeGeneratorOptions {InternalTypes = false};
			contractOptions = builder.Build(options);
			Assert.That(contractOptions, Is.EqualTo(ServiceContractGenerationOptions.None));
		}
		public void Build_CodeGeneratorOptions_TargetFrameworkVersion()
		{
			CodeGeneratorOptions options = new CodeGeneratorOptions {TargetFrameworkVersion = TargetFrameworkVersion.Version35};
			XmlSerializerImportOptions importOptions = PerformBuild(options);

			string extensionAssemblyQualifiedName = typeof(TypedDataSetSchemaImporterExtensionFx35).AssemblyQualifiedName;
			Assert.That(importOptions.WebReferenceOptions.SchemaImporterExtensions, Has.Member(extensionAssemblyQualifiedName));

			options = new CodeGeneratorOptions {TargetFrameworkVersion = TargetFrameworkVersion.Version30};
			importOptions = PerformBuild(options);

			extensionAssemblyQualifiedName = typeof(TypedDataSetSchemaImporterExtension).AssemblyQualifiedName;
			Assert.That(importOptions.WebReferenceOptions.SchemaImporterExtensions, Has.Member(extensionAssemblyQualifiedName));
		}
		public void Build_CodeGeneratorOptions_AsyncMethodsWithTargetClientVersion()
		{
			IServiceContractGenerationOptionsBuilder builder = new ServiceContractGenerationOptionsBuilder();

			CodeGeneratorOptions options = new CodeGeneratorOptions
			{
				AsyncMethods = true, TargetFrameworkVersion = TargetFrameworkVersion.Version35
			};
			ServiceContractGenerationOptions contractOptions = builder.Build(options);
			Assert.That(contractOptions, Is.EqualTo(ServiceContractGenerationOptions.AsynchronousMethods | ServiceContractGenerationOptions.EventBasedAsynchronousMethods));

			options = new CodeGeneratorOptions
			{
				AsyncMethods = true,
				TargetFrameworkVersion = TargetFrameworkVersion.Version30
			};
			contractOptions = builder.Build(options);
			Assert.That(contractOptions, Is.EqualTo(ServiceContractGenerationOptions.AsynchronousMethods));
		}
		public void Build_CodeGeneratorOptions_NamespaceMappings()
		{
			const string expectedMappingKey1 = "1";
			const string expectedMappingKey2 = "2";
			const string expectedNamespace1 = "Namespace1";
			const string expectedNamespace2 = "Namespace2";

			Dictionary<string, string> mappings = new Dictionary<string, string>
			{
				{expectedMappingKey1, expectedNamespace1},
				{expectedMappingKey2, expectedNamespace2}
			};
			CodeGeneratorOptions options = new CodeGeneratorOptions {NamespaceMappings = mappings};
			ServiceContractGenerator contractGenerator = PerformBuild(options);
			IDictionary<string, string> namespaces = contractGenerator.NamespaceMappings;

			Assert.That(namespaces, Has.Count.EqualTo(2));
			Assert.That(namespaces[expectedMappingKey1], Is.EqualTo(expectedNamespace1));
			Assert.That(namespaces[expectedMappingKey2], Is.EqualTo(expectedNamespace2));
		}
 private ServiceContractGenerator GetServiceContractGenerator(CodeGeneratorOptions codeGeneratorOptions)
 {
     return(GetServiceContractGenerator(new CodeGeneratorContext(metadataSet, codeGeneratorOptions)));
 }
		public void Build_CodeGeneratorOptions_SerializableAttribute()
		{
			CodeGeneratorOptions options = new CodeGeneratorOptions {SerializableAttribute = true};
			XsdDataContractImporter importer = PerformBuild(options);

			Assert.That(importer.Options.GenerateSerializable, Is.True);

			options = new CodeGeneratorOptions {SerializableAttribute = false};
			importer = PerformBuild(options);

			Assert.That(importer.Options.GenerateSerializable, Is.False);
		}
		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 ServiceContractGenerator PerformBuild(CodeGeneratorOptions codeGeneratorOptions)
		{
			return PerformBuild(new CodeGeneratorContext(metadataSet, codeGeneratorOptions));
		}
		private static WrappedOptions PerformBuild(CodeGeneratorOptions codeGeneratorOptions)
		{
			IWrappedOptionsBuilder builder = new WrappedOptionsBuilder();
			return builder.Build(codeGeneratorOptions);
		}
		private XmlSerializerImportOptions PerformBuild(CodeGeneratorOptions codeGeneratorOptions)
		{
			ICodeGeneratorContext codeGeneratorContext = new CodeGeneratorContext(metadataSet, codeGeneratorOptions);
			IXmlSerializerImportOptionsBuilder builder = new XmlSerializerImportOptionsBuilder();
			return builder.Build(codeGeneratorContext);
		}
		public void Build_CodeGeneratorOptions_OrderMembers()
		{
			CodeGeneratorOptions options = new CodeGeneratorOptions {OrderMembers = true};
			XmlSerializerImportOptions importOptions = PerformBuild(options);

			Assert.That(importOptions.WebReferenceOptions.CodeGenerationOptions, Is.EqualTo(CodeGenerationOptions.GenerateOrder));
		}
		public void SetUp()
		{
			codeGeneratorOptions = BuildDefaultCodeGeneratorOptions();
		}
		/// <summary>
		/// Builds a new instance.
		/// </summary>
		/// <param name="codeGeneratorOptions">The code generator options.</param>
		/// <returns>
		/// A new <see cref="WrappedOptions"/> instance.
		/// </returns>
		public WrappedOptions Build(CodeGeneratorOptions codeGeneratorOptions)
		{
			return new WrappedOptions {WrappedFlag = codeGeneratorOptions.Wrapped};
		}