public void TestAddGeneratedClientCode_PassesServiceConfigOptionsToCodeGenerator( bool useDSC, bool ignoreUnexpected, bool enableNamingAlias, string namespacePrefix, bool makeTypesInternal) { var handlerHelper = new TestConnectedServiceHandlerHelper(); var codeGenFactory = new TestODataT4CodeGeneratorFactory(); var serviceConfig = new ServiceConfigurationV4() { UseDataServiceCollection = useDSC, IgnoreUnexpectedElementsAndAttributes = ignoreUnexpected, EnableNamingAlias = enableNamingAlias, NamespacePrefix = namespacePrefix, MakeTypesInternal = makeTypesInternal, IncludeT4File = false }; var codeGenDescriptor = SetupCodeGenDescriptor(serviceConfig, "TestService", codeGenFactory, handlerHelper); codeGenDescriptor.AddGeneratedClientCodeAsync().Wait(); var generator = codeGenFactory.LastCreatedInstance; Assert.AreEqual(useDSC, generator.UseDataServiceCollection); Assert.AreEqual(enableNamingAlias, generator.EnableNamingAlias); Assert.AreEqual(ignoreUnexpected, generator.IgnoreUnexpectedElementsAndAttributes); Assert.AreEqual(makeTypesInternal, generator.MakeTypesInternal); Assert.AreEqual(namespacePrefix, generator.NamespacePrefix); Assert.AreEqual(MetadataUri, generator.MetadataDocumentUri); Assert.AreEqual(ODataT4CodeGenerator.LanguageOption.CSharp, generator.TargetLanguage); }
public void TestAddGeneratedClientCode_PassesServiceConfigOptionsToCodeGenerator(object configObject) { var handlerHelper = new TestConnectedServiceHandlerHelper(); var codeGenFactory = new TestODataT4CodeGeneratorFactory(); if (configObject == null) { throw new ArgumentNullException(string.Format(CultureInfo.InvariantCulture, "configObject")); } var serviceConfig = configObject as ServiceConfigurationV4; serviceConfig.IncludeT4File = false; var codeGenDescriptor = SetupCodeGenDescriptor(serviceConfig, "TestService", codeGenFactory, handlerHelper); codeGenDescriptor.AddGeneratedClientCodeAsync().Wait(); var generator = codeGenFactory.LastCreatedInstance; Assert.AreEqual(serviceConfig.UseDataServiceCollection, generator.UseDataServiceCollection); Assert.AreEqual(serviceConfig.EnableNamingAlias, generator.EnableNamingAlias); Assert.AreEqual(serviceConfig.IgnoreUnexpectedElementsAndAttributes, generator.IgnoreUnexpectedElementsAndAttributes); Assert.AreEqual(serviceConfig.MakeTypesInternal, generator.MakeTypesInternal); Assert.AreEqual(serviceConfig.NamespacePrefix, generator.NamespacePrefix); Assert.AreEqual(serviceConfig.ExcludedOperationImports, generator.ExcludedOperationImports); Assert.AreEqual(serviceConfig.ExcludedSchemaTypes, generator.ExcludedSchemaTypes); Assert.AreEqual(MetadataUri, generator.MetadataDocumentUri); Assert.AreEqual(ODataT4CodeGenerator.LanguageOption.CSharp, generator.TargetLanguage); }
public void TestAddGenerateClientCode_GeneratesMultipleFiles() { var serviceName = "MyService"; ServiceConfiguration serviceConfig = new ServiceConfigurationV4() { ServiceName = serviceName, GeneratedFileNamePrefix = "Main", GenerateMultipleFiles = true }; var codeGen = new TestODataT4CodeGenerator(); var codeGenFactory = new TestODataT4CodeGeneratorFactory(codeGen); var handlerHelper = new TestConnectedServiceHandlerHelper(); var codeGenDescriptor = SetupCodeGenDescriptor(serviceConfig, serviceName, codeGenFactory, handlerHelper); var template = new StringBuilder(); codeGen.MultipleFilesManager = ODataT4CodeGenerator.FilesManager.Create(null, template); codeGen.MultipleFilesManager.StartNewFile("File1.cs", false); template.Append("Contents1"); codeGen.MultipleFilesManager.EndBlock(); codeGen.MultipleFilesManager.StartNewFile("File2.cs", false); template.Append("Contents2"); codeGen.MultipleFilesManager.EndBlock(); //The file manager expects the files to have been saved in the Temp directory // when ODataT4CodeGenerator.TransformText() was called. Since we're using a dummy code generator // we need to manually ensure those files exist var file1TempPath = Path.Combine(Path.GetTempPath(), "File1.cs"); File.WriteAllText(file1TempPath, "Contents1"); var file2TempPath = Path.Combine(Path.GetTempPath(), "File2.cs"); File.WriteAllText(file2TempPath, "Contents2"); codeGenDescriptor.AddGeneratedClientCodeAsync().Wait(); var expectedMainFilePath = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "Main.cs"); var mainFile = handlerHelper.AddedFiles.FirstOrDefault(f => f.CreatedFile == expectedMainFilePath); Assert.IsNotNull(mainFile); Assert.AreEqual("Generated code", File.ReadAllText(mainFile.SourceFile)); var expectedFile1Path = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "File1.cs"); var file1 = handlerHelper.AddedFiles.FirstOrDefault(f => f.CreatedFile == expectedFile1Path); Assert.IsNotNull(file1); Assert.AreEqual("Contents1", File.ReadAllText(file1.SourceFile)); var expectedFile2Path = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "File2.cs"); var file2 = handlerHelper.AddedFiles.FirstOrDefault(f => f.CreatedFile == expectedFile2Path); Assert.IsNotNull(file2); Assert.AreEqual("Contents2", File.ReadAllText(file2.SourceFile)); }
public void TestAddGeneratedClientCode_GeneratesT4TemplateFiles_WithIncludeT4File_WithExcludedBoundOperations(string lang, string referenceFile) { var serviceName = "MyService"; ServiceConfiguration serviceConfig = new ServiceConfigurationV4() { ServiceName = serviceName, Endpoint = "https://service/$metadata", GeneratedFileNamePrefix = "Reference", IncludeT4File = true, ExcludedBoundOperations = new List <string>() { "BoundOperation1(Type1)", "BoundOperation2(Type2)", "BoundOperation3(Type1)" } }; var codeGenFactory = new TestODataT4CodeGeneratorFactory(); var handlerHelper = new TestConnectedServiceHandlerHelper(); var codeGenDescriptor = SetupCodeGenDescriptor(serviceConfig, serviceName, codeGenFactory, handlerHelper, lang == "cs" ? ODataT4CodeGenerator.LanguageOption.CSharp : ODataT4CodeGenerator.LanguageOption.VB); codeGenDescriptor.AddGeneratedClientCodeAsync().Wait(); var ttIncludeSourcePath = Path.Combine(Directory.GetCurrentDirectory(), "Templates", "ODataT4CodeGenerator.ttinclude"); var ttIncludeOutputPath = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "Reference.ttinclude"); var fileManagerSourcePath = Path.Combine(Directory.GetCurrentDirectory(), "Templates", "ODataT4CodeGenFilesManager.ttinclude"); var fileManagerOutputPath = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "ODataT4CodeGenFilesManager.ttinclude"); var ttOutputPath = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "Reference.tt"); var csdlFileName = String.Concat(serviceName, "Csdl.xml"); Assert.IsTrue(handlerHelper.AddedFiles.Contains((fileManagerOutputPath, fileManagerSourcePath))); var ttInclude = handlerHelper.AddedFiles.FirstOrDefault(f => f.CreatedFile == ttIncludeOutputPath); Assert.IsNotNull(ttInclude); var ttIncludeOriginalText = File.ReadAllText(ttIncludeSourcePath); var ttIncludeExpectedText = ttIncludeOriginalText.Replace("output extension=\".cs\"", $"output extension=\".{lang}\""); var ttIncludeSavedText = File.ReadAllText(ttInclude.SourceFile); Assert.AreEqual(ttIncludeExpectedText, ttIncludeSavedText); var tt = handlerHelper.AddedFiles.FirstOrDefault(f => f.CreatedFile == ttOutputPath); Assert.IsNotNull(tt); var ttExpectedText = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "CodeGeneration", referenceFile)); ttExpectedText = ttExpectedText.Replace("$$CsdlFullPath$$", Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, csdlFileName)); ttExpectedText = ttExpectedText.Replace("$$CsdlRelativePath$$", csdlFileName); ttExpectedText = Regex.Replace(ttExpectedText, "(public const string ExcludedBoundOperations = )\"\";", "$1\"" + string.Join(",", (serviceConfig as ServiceConfigurationV4).ExcludedBoundOperations) + "\";"); var ttSavedText = File.ReadAllText(tt.SourceFile); Assert.AreEqual(ttExpectedText, ttSavedText); }
public void TestAddNugetPackagesAsync_ShouldInstallODataClientLibrariesIfNotAlreadyInstalled() { var referenceFolderPath = Path.Combine(TestProjectRootPath, ServicesRootFolder, "service"); Directory.CreateDirectory(referenceFolderPath); Project project = CreateTestProject(TestProjectRootPath, ODataT4CodeGenerator.LanguageOption.CSharp); var codeGenFactory = new TestODataT4CodeGeneratorFactory(); var descriptor = SetupCodeGenDescriptor(new ServiceConfigurationV4(), "service", codeGenFactory, new TestConnectedServiceHandlerHelper()); descriptor.AddNugetPackagesAsync().Wait(); var installer = descriptor.PackageInstaller as TestVsPackageInstaller; Assert.IsTrue(installer.InstalledPackages.Contains(Common.Constants.V4ClientNuGetPackage)); Assert.IsTrue(installer.InstalledPackages.Contains(Common.Constants.V4EdmNuGetPackage)); Assert.IsTrue(installer.InstalledPackages.Contains(Common.Constants.V4ODataNuGetPackage)); Assert.IsTrue(installer.InstalledPackages.Contains(Common.Constants.V4SpatialNuGetPackage)); }
public void TestAddGeneratedClientCode_GeneratesCsdlFiles(string lang) { var serviceName = "MyService"; ServiceConfiguration serviceConfig = new ServiceConfigurationV4() { ServiceName = serviceName, Endpoint = "https://service/$metadata", GeneratedFileNamePrefix = "Reference", IncludeT4File = true }; var codeGenFactory = new TestODataT4CodeGeneratorFactory(); var handlerHelper = new TestConnectedServiceHandlerHelper(); var codeGenDescriptor = SetupCodeGenDescriptor(serviceConfig, serviceName, codeGenFactory, handlerHelper, lang == "cs" ? ODataT4CodeGenerator.LanguageOption.CSharp : ODataT4CodeGenerator.LanguageOption.VB); codeGenDescriptor.AddGeneratedClientCodeAsync().Wait(); var csdlFilePath = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, String.Concat(serviceName, "Csdl.xml")); Assert.IsNotNull(csdlFilePath); }
public void TestAddGeneratedClientCode_GeneratesT4Templates_AllSettingsSet() { var serviceName = "MyService"; ServiceConfiguration serviceConfig = new ServiceConfigurationV4() { EdmxVersion = Common.Constants.EdmxVersion4, ServiceName = serviceName, IncludeT4File = true, Endpoint = "https://service/$metadata", IncludeCustomHeaders = true, CustomHttpHeaders = "Key1:val\nKey2:val2", IncludeWebProxy = true, WebProxyHost = "http://localhost:8080", IncludeWebProxyNetworkCredentials = true, WebProxyNetworkCredentialsDomain = "domain", WebProxyNetworkCredentialsUsername = "******", WebProxyNetworkCredentialsPassword = "******", ExcludedSchemaTypes = new List <string>() { "Namespace.Type1", "Namespace.Type2", "Namespace.Type3" }, ExcludedOperationImports = new List <string>() { "Operation1", "Operation2" }, GeneratedFileNamePrefix = "Reference", UseNamespacePrefix = true, UseDataServiceCollection = true, NamespacePrefix = "MyNamespace", EnableNamingAlias = true, GenerateMultipleFiles = true, MakeTypesInternal = true, IgnoreUnexpectedElementsAndAttributes = true, OpenGeneratedFilesInIDE = true }; var codeGenFactory = new TestODataT4CodeGeneratorFactory(); var handlerHelper = new TestConnectedServiceHandlerHelper(); var codeGenDescriptor = SetupCodeGenDescriptor(serviceConfig, serviceName, codeGenFactory, handlerHelper); codeGenDescriptor.AddGeneratedClientCodeAsync().Wait(); var ttIncludeSourcePath = Path.Combine(Directory.GetCurrentDirectory(), "Templates", "ODataT4CodeGenerator.ttinclude"); var ttIncludeOutputPath = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "Reference.ttinclude"); var fileManagerSourcePath = Path.Combine(Directory.GetCurrentDirectory(), "Templates", "ODataT4CodeGenFilesManager.ttinclude"); var fileManagerOutputPath = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "ODataT4CodeGenFilesManager.ttinclude"); var ttOutputPath = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "Reference.tt"); Assert.IsTrue(handlerHelper.AddedFiles.Contains((fileManagerOutputPath, fileManagerSourcePath))); var ttInclude = handlerHelper.AddedFiles.FirstOrDefault(f => f.CreatedFile == ttIncludeOutputPath); Assert.IsNotNull(ttInclude); var ttIncludeOriginalText = File.ReadAllText(ttIncludeSourcePath); var ttIncludeSavedText = File.ReadAllText(ttInclude.SourceFile); Assert.AreEqual(ttIncludeOriginalText, ttIncludeSavedText); var tt = handlerHelper.AddedFiles.FirstOrDefault(f => f.CreatedFile == ttOutputPath); Assert.IsNotNull(tt); var ttExpectedText = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "CodeGeneration", "TestConfigAllOptionsSet.txt")); ttExpectedText = ttExpectedText.Replace("$$CsdlFullPath$$", Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "Csdl.xml")); var ttSavedText = File.ReadAllText(tt.SourceFile); Assert.AreEqual(ttExpectedText, ttSavedText); }