public async Task ScriptDatabaseSchemaAndData()
        {
            using (TestServiceDriverProvider testService = new TestServiceDriverProvider())
                using (SelfCleaningTempFile tempFile = new SelfCleaningTempFile())
                {
                    ScriptingParams requestParams = new ScriptingParams
                    {
                        FilePath         = tempFile.FilePath,
                        ConnectionString = this.Northwind.ConnectionString,
                        ScriptOptions    = new ScriptOptions
                        {
                            TypeOfDataToScript = "SchemaAndData",
                        },
                    };

                    ScriptingResult result = await testService.Script(requestParams);

                    ScriptingPlanNotificationParams planEvent = await testService.Driver.WaitForEvent(ScriptingPlanNotificationEvent.Type, TimeSpan.FromSeconds(30));

                    ScriptingCompleteParams completeParameters = await testService.Driver.WaitForEvent(ScriptingCompleteEvent.Type, TimeSpan.FromSeconds(30));

                    Assert.True(completeParameters.Success);
                    Assert.Equal <int>(ScriptingFixture.ObjectCountWithDatabase, planEvent.Count);
                    Assert.True(File.Exists(tempFile.FilePath));
                    Assert.True(new FileInfo(tempFile.FilePath).Length > 0);
                    AssertSchemaInFile(tempFile.FilePath, assert: true);
                    AssertTableDataInFile(tempFile.FilePath, assert: true);
                }
        }
Exemple #2
0
        public async Task ScriptSelectTable()
        {
            using (TestServiceDriverProvider testService = new TestServiceDriverProvider())
                using (SelfCleaningTempFile tempFile = new SelfCleaningTempFile())
                {
                    await testService.Connect(tempFile.FilePath, testService.TestConnectionService.GetConnectionParameters(serverType: TestServerType.OnPrem));

                    ScriptingParams requestParams = new ScriptingParams
                    {
                        ScriptDestination = "ToEditor",
                        OwnerUri          = tempFile.FilePath,
                        ScriptOptions     = new ScriptOptions
                        {
                            ScriptCreateDrop = "ScriptSelect"
                        },
                        ScriptingObjects = new List <ScriptingObject>
                        {
                            new ScriptingObject
                            {
                                Type   = "Table",
                                Schema = "dbo",
                                Name   = "Customers",
                            }
                        }
                    };
                    ScriptingResult result = await testService.Script(requestParams);

                    Assert.True(result.Script.Contains("SELECT"));
                }
        }
        public async Task ScriptTableDoesNotExist()
        {
            using (TestServiceDriverProvider testService = new TestServiceDriverProvider())
                using (SelfCleaningTempFile tempFile = new SelfCleaningTempFile())
                {
                    ScriptingParams requestParams = new ScriptingParams
                    {
                        FilePath         = tempFile.FilePath,
                        ConnectionString = this.Northwind.ConnectionString,
                        ScriptOptions    = new ScriptOptions
                        {
                            TypeOfDataToScript = "SchemaOnly",
                        },
                        ScriptingObjects = new List <ScriptingObject>
                        {
                            new ScriptingObject
                            {
                                Type   = "Table",
                                Schema = "dbo",
                                Name   = "TableDoesNotExist",
                            },
                        }
                    };

                    ScriptingResult result = await testService.Script(requestParams);

                    ScriptingCompleteParams parameters = await testService.Driver.WaitForEvent(ScriptingCompleteEvent.Type, TimeSpan.FromSeconds(15));

                    Assert.True(parameters.HasError);
                    Assert.Equal("An error occurred while scripting the objects.", parameters.ErrorMessage);
                    Assert.Contains("The Table '[dbo].[TableDoesNotExist]' does not exist on the server.", parameters.ErrorDetails);
                }
        }
Exemple #4
0
        public async Task ScriptTable()
        {
            using (TestServiceDriverProvider testService = new TestServiceDriverProvider())
            {
                ScriptingParams requestParams = new ScriptingParams
                {
                    ScriptDestination = "ToEditor",
                    ConnectionString  = this.Northwind.ConnectionString,
                    ScriptOptions     = new ScriptOptions
                    {
                        TypeOfDataToScript = "SchemaOnly",
                    },
                    ScriptingObjects = new List <ScriptingObject>
                    {
                        new ScriptingObject
                        {
                            Type   = "Table",
                            Schema = "dbo",
                            Name   = "Customers",
                        },
                    }
                };

                ScriptingResult result = await testService.Script(requestParams);

                ScriptingPlanNotificationParams planEvent = await testService.Driver.WaitForEvent(ScriptingPlanNotificationEvent.Type, TimeSpan.FromSeconds(1));

                ScriptingCompleteParams parameters = await testService.Driver.WaitForEvent(ScriptingCompleteEvent.Type, TimeSpan.FromSeconds(30));

                Assert.True(parameters.Success);
                Assert.Equal <int>(1, planEvent.Count);
            }
        }
Exemple #5
0
        void scriptObjectAction_Execute(object sender, SimpleActionExecuteEventArgs e)
        {
            ObjectScriptGenerator creator = new ObjectScriptGenerator();
            var result = new ScriptingResult()
            {
                Script = creator.GenerateScript(e.SelectedObjects.Cast <object>().ToList())
            };

            e.ShowViewParameters.CreatedView = Application.CreateDetailView(Application.CreateObjectSpace(result.GetType()), result);
        }
Exemple #6
0
        public string GenerateScript(IList <object> selectedObjects)
        {
            CodeCompileUnit compileUnit = new CodeCompileUnit();
            CodeNamespace   ns          = new CodeNamespace();

            ns.Name = "ScriptedObjects";
            compileUnit.Namespaces.Add(ns);
            CodeTypeDeclaration typeDeclaration = new CodeTypeDeclaration();

            typeDeclaration.Name = "Class1";
            ns.Types.Add(typeDeclaration);
            var method = new CodeMemberMethod();

            method.Name = "CreateObject";

            typeDeclaration.Members.Add(method);
            method.Parameters.Add(new CodeParameterDeclarationExpression(new CodeTypeReference(typeof(Session)), "session"));


            ns.Imports.AddRange(selectedObjects.Select(obj => obj.GetType().Name).Distinct().Select(n => new CodeNamespaceImport(n)).ToArray());

            var instanceManager = new InstanceManager();

            if (selectedObjects.Count == 1)
            {
                var rootObject     = selectedObjects[0];
                var rootObjectType = rootObject.GetType();

                method.ReturnType = new CodeTypeReference(rootObjectType.Name);
                string resultName = AddObjectInstance(method, rootObject, instanceManager);
                method.Statements.Add(new CodeMethodReturnStatement(new CodeVariableReferenceExpression(resultName)));
            }
            else
            {
                foreach (var obj in selectedObjects)
                {
                    AddObjectInstance(method, obj, instanceManager);
                }
            }
            CSharpCodeProvider codeProvider = new CSharpCodeProvider();
            var result = new ScriptingResult();

            using (var stringWriter = new StringWriter())
            {
                using (var itw = new IndentedTextWriter(stringWriter))
                {
                    var options = new CodeGeneratorOptions();
                    options.BracingStyle = "C";
                    codeProvider.GenerateCodeFromCompileUnit(compileUnit, itw, options);
                }

                return(stringWriter.ToString());
            }
        }
Exemple #7
0
        public async Task <ScriptingResult> EvaluateScriptAsync <T>(string code, T properties)
        {
            if (string.IsNullOrWhiteSpace(code))
            {
                return(ScriptingResult.FromError(
                           new ArgumentException("code parameter cannot be empty, null or whitespace", nameof(code)),
                           ScriptStage.Preprocessing));
            }

            var options = ScriptOptions.Default
                          .WithReferences(typeof(IDiscordClient).Assembly)
                          .WithReferences(typeof(DiscordSocketClient).Assembly)
                          .WithReferences(typeof(BotService).Assembly)
                          .WithImports(Imports);

            var script = CSharpScript.Create(code, options, typeof(T));

            var compilationTimer       = Stopwatch.StartNew();
            var compilationDiagnostics = script.Compile();

            compilationTimer.Stop();

            if (compilationDiagnostics.Length > 0 &&
                compilationDiagnostics.Any(a => a.Severity == DiagnosticSeverity.Error))
            {
                return(ScriptingResult.FromError(compilationDiagnostics, ScriptStage.Compilation,
                                                 compilationTime: compilationTimer.ElapsedMilliseconds));
            }

            var executionTimer = new Stopwatch();

            try
            {
                executionTimer.Start();
                var executionResult = await script.RunAsync(properties).ConfigureAwait(false);

                executionTimer.Stop();
                var returnValue = executionResult.ReturnValue;

                GC.Collect();

                return(ScriptingResult.FromSuccess(returnValue, compilationTimer.ElapsedMilliseconds,
                                                   executionTimer.ElapsedMilliseconds));
            }
            catch (Exception exception)
            {
                return(ScriptingResult.FromError(exception, ScriptStage.Execution, compilationTimer.ElapsedMilliseconds,
                                                 executionTimer.ElapsedMilliseconds));
            }
        }
Exemple #8
0
        private static bool VerifyScriptingResult(ScriptingResult result, List <string> expectedScripts)
        {
            if (expectedScripts == null || (expectedScripts.Count > 0 && expectedScripts.All(x => x == null)))
            {
                return(string.IsNullOrEmpty(result.Script));
            }

            foreach (string expectedScript in expectedScripts)
            {
                if (!result.Script.Contains(expectedScript))
                {
                    return(false);
                }
            }
            return(true);
        }
Exemple #9
0
        public async Task ScriptDatabaseSchemaAndData()
        {
            using (TestServiceDriverProvider testService = new TestServiceDriverProvider())
            {
                ScriptingParams requestParams = new ScriptingParams
                {
                    ScriptDestination = "ToEditor",
                    ConnectionString  = this.Northwind.ConnectionString,
                    ScriptOptions     = new ScriptOptions
                    {
                        TypeOfDataToScript = "SchemaAndData",
                    },
                };

                ScriptingResult result = await testService.Script(requestParams);

                ScriptingCompleteParams completeParameters = await testService.Driver.WaitForEvent(ScriptingCompleteEvent.Type, TimeSpan.FromSeconds(30));

                Assert.True(completeParameters.Success);
            }
        }
        public async Task ScriptSchemaInvalidFilePath()
        {
            using (TestServiceDriverProvider testService = new TestServiceDriverProvider())
            {
                ScriptingParams requestParams = new ScriptingParams
                {
                    FilePath         = "This path doesn't event exist",
                    ConnectionString = "Server=Temp;Database=Temp;User Id=Temp;Password=Temp",
                    ScriptOptions    = new ScriptOptions
                    {
                        TypeOfDataToScript = "SchemaAndData",
                    },
                };

                ScriptingResult result = await testService.Script(requestParams);

                ScriptingCompleteParams parameters = await testService.Driver.WaitForEvent(ScriptingCompleteEvent.Type, TimeSpan.FromSeconds(10));

                Assert.True(parameters.HasError);
                Assert.Equal("Invalid directory specified by the ScriptingParams.FilePath property.", parameters.ErrorMessage);
            }
        }
Exemple #11
0
        public async Task ScriptSchemaInvalidConnectionString()
        {
            using (TestServiceDriverProvider testService = new TestServiceDriverProvider())
            {
                ScriptingParams requestParams = new ScriptingParams
                {
                    ScriptDestination = "ToEditor",
                    ConnectionString  = "I'm an invalid connection string",
                    ScriptOptions     = new ScriptOptions
                    {
                        TypeOfDataToScript = "SchemaAndData",
                    },
                };

                ScriptingResult result = await testService.Script(requestParams);

                ScriptingCompleteParams parameters = await testService.Driver.WaitForEvent(ScriptingCompleteEvent.Type, TimeSpan.FromSeconds(10));

                Assert.True(parameters.HasError);
                Assert.Equal("Error parsing ScriptingParams.ConnectionString property.", parameters.ErrorMessage);
            }
        }
        public async Task ScriptSchemaCancel()
        {
            using (TestServiceDriverProvider testService = new TestServiceDriverProvider())
                using (SelfCleaningTempFile tempFile = new SelfCleaningTempFile())
                {
                    ScriptingParams requestParams = new ScriptingParams
                    {
                        FilePath         = tempFile.FilePath,
                        ConnectionString = this.Northwind.ConnectionString,
                        ScriptOptions    = new ScriptOptions
                        {
                            TypeOfDataToScript = "SchemaAndData",
                        },
                    };

                    ScriptingResult result = await testService.Script(requestParams);

                    ScriptingCancelResult cancelResult = await testService.CancelScript(result.OperationId);

                    ScriptingCompleteParams cancelEvent = await testService.Driver.WaitForEvent(ScriptingCompleteEvent.Type, TimeSpan.FromSeconds(10));

                    Assert.True(cancelEvent.Canceled);
                }
        }
        public async Task ScriptTableAndData()
        {
            using (TestServiceDriverProvider testService = new TestServiceDriverProvider())
                using (SelfCleaningTempFile tempFile = new SelfCleaningTempFile())
                {
                    ScriptingParams requestParams = new ScriptingParams
                    {
                        FilePath         = tempFile.FilePath,
                        ConnectionString = this.Northwind.ConnectionString,
                        ScriptOptions    = new ScriptOptions
                        {
                            TypeOfDataToScript = "SchemaAndData",
                        },
                        ScriptingObjects = new List <ScriptingObject>
                        {
                            new ScriptingObject
                            {
                                Type   = "Table",
                                Schema = "dbo",
                                Name   = "Customers",
                            },
                        }
                    };

                    ScriptingResult result = await testService.Script(requestParams);

                    ScriptingPlanNotificationParams planEvent = await testService.Driver.WaitForEvent(ScriptingPlanNotificationEvent.Type, TimeSpan.FromSeconds(30));

                    ScriptingCompleteParams parameters = await testService.Driver.WaitForEvent(ScriptingCompleteEvent.Type, TimeSpan.FromSeconds(30));

                    Assert.True(parameters.Success);
                    Assert.Equal <int>(1, planEvent.Count);
                    Assert.True(File.Exists(tempFile.FilePath));
                    Assert.True(new FileInfo(tempFile.FilePath).Length > 0);
                }
        }
Exemple #14
0
 private static bool VerifyScriptingResult(ScriptingResult result, string expected)
 {
     return(!string.IsNullOrEmpty(result.Script) && result.Script.Contains(expected));
 }