Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }