static void Main(string[] args) { try { var arguments = ConsoleApplication.ParseCommandLineArguments(args); var applicationName = arguments.ContainsKey("SettingsFolderName") ? arguments["SettingsFolderName"] : "Unknown Console Context"; //okay need to create app var dependencyResolver = new PrismDependencyContainer(new UnityContainer()); var controller = new ConsoleApplicationController(applicationName, dependencyResolver); var settingsManager = new PrismSettingsManager(controller); var applicationOptions = new ApplicationOptionsViewModel(controller); var app = new ConsoleApplication(controller, applicationOptions, settingsManager); //load modules in folder path app.LoadModulesInExcecutionFolder(); //run app app.Run(args); System.Console.WriteLine("Process Completed. Finishing In 10 Seconds"); Thread.Sleep(10000); } catch (Exception ex) { System.Console.WriteLine(ex.DisplayString()); System.Console.WriteLine("Press Any Key To Close"); System.Console.ReadKey(); } }
public override void RunStartedExtention(Dictionary <string, string> replacementsDictionary) { //get a xrm connection and package setting by loading the entry dialogs XrmPackageSettings = new XrmPackageSettings(); #if DEBUG XrmPackageSettings.SolutionDynamicsCrmPrefix = "template"; XrmPackageSettings.SolutionObjectPrefix = "Template"; #endif var container = new PrismDependencyContainer(new UnityContainer()); var applicationController = new VsixApplicationController(container); if (replacementsDictionary.ContainsKey("$specifiedsolutionname$") && (replacementsDictionary["$specifiedsolutionname$"] == null || replacementsDictionary["$specifiedsolutionname$"] == "")) { applicationController.UserMessage("Warning! The XRM Solution Generation Will Not Work Correctly If Create Directory For Solution Was Not Specified In The New Solution Dialog"); } RunWizardSettingsEntry(XrmPackageSettings, applicationController); //add token replacements for the template projects AddReplacements(replacementsDictionary, XrmPackageSettings); //used later DestinationDirectory = replacementsDictionary["$destinationdirectory$"]; SafeProjectName = replacementsDictionary["$safeprojectname$"]; }
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); //load an application with the module buttons and fake things to spawn the vsix dialogs var container = new PrismDependencyContainer(new UnityContainer()); var applicationName = "Vsix Test Shell"; var settingsFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "JosephM Xrm", applicationName); var visualStudioService = new FakeVisualStudioService(solutionDirectory: settingsFolder); container.RegisterInstance(typeof(IVisualStudioService), visualStudioService); var applicationController = new VsixApplicationController(container, applicationName: applicationName); VsixApplication = new VsixApplication(applicationController, new VsixSettingsManager(visualStudioService), new Guid("43816e6d-4db8-48d6-8bfa-75916cb080f0")); VsixApplication.AddModule <OpenWebModule>(); VsixApplication.AddModule <DeployAssemblyModule>(); VsixApplication.AddModule <ManagePluginTriggersModule>(); VsixApplication.AddModule <XrmCrudModule>(); VsixApplication.AddModule <TestDialogModule>(); }
static void Main(string[] args) { var arguments = ConsoleApplication.ParseCommandLineArguments(args); var applicationName = arguments.ContainsKey("SettingsFolderName") ? arguments["SettingsFolderName"] : "Unknown Console Context"; //okay need to create app var dependencyResolver = new PrismDependencyContainer(new UnityContainer()); var controller = new ConsoleApplicationController(applicationName, dependencyResolver); try { var settingsManager = new PrismSettingsManager(controller); var applicationOptions = new ApplicationOptionsViewModel(controller); var app = new ConsoleApplication(controller, applicationOptions, settingsManager); //load modules in folder path app.LoadModulesInExecutionFolder(); //run app app.Run(args); } catch (Exception ex) { System.Console.WriteLine(ex.DisplayString()); System.Console.WriteLine("Fatal Error"); var logFile = new LogFileUserInterface(controller.LogPath, controller.ApplicationName, true, 50); logFile.LogMessage($"Fatal Error During Console Execution: {ex.XrmDisplayString()}"); throw; } }
public ApplicationControllerBase CreateTestVsixApplicationController() { var container = new PrismDependencyContainer(new UnityContainer()); var visualStudioService = VisualStudioService; container.RegisterInstance(typeof(IVisualStudioService), visualStudioService); container.RegisterInstance(typeof(ISettingsManager), new VsixSettingsManager(visualStudioService)); var applicationController = new FakeVsixApplicationController(container); return(applicationController); }
public void VsixSolutionWizardTest() { //okay so this wizard contains a dialog spawned different to the others //since it is loaded prior to the solution being created //this script just verifies the settings are netered into the dialog wihtout a crash with no visual studio solutoion context etc. var packageSettings = new XrmPackageSettings { SolutionDynamicsCrmPrefix = "FAKE", SolutionObjectPrefix = "Fake" }; //okay spawn the wizards entry method with a fake controller var container = new PrismDependencyContainer(new UnityContainer()); var applicationController = new FakeVsixApplicationController(container); XrmSolutionWizardBase.RunWizardSettingsEntry(packageSettings, applicationController); //fake applcation simply to use its navigation and entry methods var fakeVsixApplication = TestApplication.CreateTestApplication(applicationController); //okay so the package entry dialgo should redirect us to the conneciton entry when started as we don;t have a connection yet var dialog = fakeVsixApplication.GetNavigatedDialog <XrmPackageSettingsDialog>(); var connectionEntryDialog = dialog.SubDialogs.First(); var connectionEntry = fakeVsixApplication.GetSubObjectEntryViewModel(connectionEntryDialog); var connectionToEnter = GetXrmRecordConfiguration(); fakeVsixApplication.EnterAndSaveObject(connectionToEnter, connectionEntry); //okay now the conneciton is entered it should navigate to the package settings entry var packageSettingsEntry = fakeVsixApplication.GetSubObjectEntryViewModel(dialog, index: 1); //we want to verify that the object had the settings passed into it as well as the lookup connection works packageSettingsEntry.GetBooleanFieldFieldViewModel(nameof(XrmPackageSettings.AddToSolution)).Value = true; var solutionPicklistField = packageSettingsEntry.GetLookupFieldFieldViewModel(nameof(XrmPackageSettings.Solution)); solutionPicklistField.SelectedItem = solutionPicklistField.ItemsSource.First(); var connectionsubGrid = packageSettingsEntry.GetEnumerableFieldViewModel(nameof(XrmPackageSettings.Connections)); Assert.IsTrue(connectionsubGrid.GridRecords.Any()); Assert.AreEqual(connectionToEnter.OrganizationUniqueName, connectionsubGrid.GridRecords.First().GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.OrganizationUniqueName)).Value); packageSettingsEntry.SaveButtonViewModel.Invoke(); Assert.IsTrue(packageSettings.Connections.Any()); Assert.AreEqual(connectionToEnter.OrganizationUniqueName, packageSettings.Connections.First().OrganizationUniqueName); if (applicationController.GetObjects("Main").Any()) { Assert.Inconclusive("Haven't verified closure of the form after entry instead of navigation to completion screen"); } }
public override void RunStartedExtention(Dictionary <string, string> replacementsDictionary) { //get a xrm connection and package setting by loading the entry dialogs XrmPackageSettings = new XrmPackageSettings(); #if DEBUG XrmPackageSettings.SolutionDynamicsCrmPrefix = "template"; XrmPackageSettings.SolutionObjectPrefix = "Template"; #endif var container = new PrismDependencyContainer(new UnityContainer()); var applicationController = new VsixApplicationController(container); RunWizardSettingsEntry(XrmPackageSettings, applicationController); //add token replacements for the template projects AddReplacements(replacementsDictionary, XrmPackageSettings); //used later DestinationDirectory = replacementsDictionary["$destinationdirectory$"]; SafeProjectName = replacementsDictionary["$safeprojectname$"]; }
/// <summary> /// Initialization of the package; this method is called right after the package is sited, so this is the place /// where you can put all the initialization code that rely on services provided by VisualStudio. /// </summary> protected override void Initialize() { base.Initialize(); var container = new PrismDependencyContainer(new UnityContainer()); var commandService = GetService(typeof(IMenuCommandService)) as OleMenuCommandService; container.RegisterInstance(typeof(IMenuCommandService), commandService); var dte = GetService(typeof(SDTE)) as DTE2; var visualStudioService = new VisualStudioService(dte); container.RegisterInstance(typeof(IVisualStudioService), visualStudioService); var applicationController = new VsixApplicationController(container); var app = new VsixApplication(applicationController, new VsixSettingsManager(visualStudioService), new Guid("43816e6d-4db8-48d6-8bfa-75916cb080f0")); app.AddModule <OpenWebModule>(0x010B); app.AddModule <OpenSolutionModule>(0x010C); app.AddModule <OpenAdvancedFindModule>(0x010D); app.AddModule <ClearCacheModule>(0x0109); app.AddModule <XrmCrudModule>(0x0112); app.AddModule <InstanceComparerModule>(0x0111); app.AddModule <UpdateAssemblyModule>(0x0105); app.AddModule <XrmPackageSettingsModule>(0x0106); app.AddModule <DeployAssemblyModule>(0x0103); app.AddModule <ManagePluginTriggersModule>(0x0104); app.AddModule <VsixCustomisationImportModule>(0x010A); app.AddModule <VsixCreatePackageModule>(0x010E); app.AddModule <RefreshSchemaModule>(0x0100); app.AddModule <DeployWebResourceModule>(0x0102); app.AddModule <VsixImportCsvsModule>(0x0108); app.AddModule <VsixDeployPackageModule> (0x0110); app.AddModule <XrmPackageAboutModule>(0x0113); app.AddModule <ImportSolutionModule>(0x0114); app.AddModule <ImportRecordsModule>(0x0115); }
public void PrismDependencyControllerTestsObjectKeyTest() { //this is a test to verify for a module injecting custom grid functions for a type //create unity container var container = new PrismDependencyContainer(new UnityContainer()); //verify each type gets its dedicated list of custom functions returned var type1List = new CustomGridFunctions(); type1List.AddFunction(new CustomGridFunction(typeof(TestResolveType).AssemblyQualifiedName, "Label", () => { })); var type2List = new CustomGridFunctions(); type2List.AddFunction(new CustomGridFunction(typeof(TestResolveType2).AssemblyQualifiedName, "Label 2", () => { })); container.RegisterInstance(typeof(CustomGridFunctions), typeof(TestResolveType).AssemblyQualifiedName, type1List); container.RegisterInstance(typeof(CustomGridFunctions), typeof(TestResolveType2).AssemblyQualifiedName, type2List); Assert.AreEqual(typeof(TestResolveType).AssemblyQualifiedName, ((CustomGridFunctions)container.ResolveInstance(typeof(CustomGridFunctions), typeof(TestResolveType).AssemblyQualifiedName)).CustomFunctions.First().Id); Assert.AreEqual(typeof(TestResolveType2).AssemblyQualifiedName, ((CustomGridFunctions)container.ResolveInstance(typeof(CustomGridFunctions), typeof(TestResolveType2).AssemblyQualifiedName)).CustomFunctions.First().Id); //okay this one is autmatically created by the unity container //but iteratively add and resolve 2 items and verify they are retained in the resolved list var createdByContainer = (CustomGridFunctions)container.ResolveInstance(typeof(CustomGridFunctions), typeof(TestResolveTypeNotRegistered).AssemblyQualifiedName); Assert.AreEqual(0, createdByContainer.CustomFunctions.Count()); createdByContainer.AddFunction(new CustomGridFunction(typeof(TestResolveTypeNotRegistered).AssemblyQualifiedName, "Label X", () => { })); container.RegisterInstance(typeof(CustomGridFunctions), typeof(TestResolveTypeNotRegistered).AssemblyQualifiedName, type1List); createdByContainer = (CustomGridFunctions)container.ResolveInstance(typeof(CustomGridFunctions), typeof(TestResolveTypeNotRegistered).AssemblyQualifiedName); Assert.AreEqual(1, createdByContainer.CustomFunctions.Count()); createdByContainer.AddFunction(new CustomGridFunction(typeof(TestResolveTypeNotRegistered).AssemblyQualifiedName, "Label Y", () => { })); container.RegisterInstance(typeof(CustomGridFunctions), typeof(TestResolveTypeNotRegistered).AssemblyQualifiedName, type1List); createdByContainer = (CustomGridFunctions)container.ResolveInstance(typeof(CustomGridFunctions), typeof(TestResolveTypeNotRegistered).AssemblyQualifiedName); Assert.AreEqual(2, createdByContainer.CustomFunctions.Count()); }
public void ConsoleApplicationModuleGenerateBatAndExecuteTest() { //this is done in the load.edit saved request form //a button is added the the saved request grid whiuch generates the .bat //so we need to save a request //then navigate to the save requests and trigger the generate bat button var testApplication = CreateThisApp(); //set to no previously saved ones var savedRequests = new SavedSettings(); var settingsManager = testApplication.Controller.ResolveType <ISettingsManager>(); settingsManager.SaveSettingsObject(savedRequests, typeof(TestSavedRequestDialogRequest)); //navigate to the request and populate the string field var entryForm = testApplication.NavigateToDialogModuleEntryForm <TestSavedRequestModule, TestSavedRequestDialog>(); var request = new TestSavedRequestDialogRequest() { SomeArbitraryString = nameof(TestSavedRequestDialogRequest.SomeArbitraryString) }; testApplication.EnterObject(request, entryForm); //trigger save request var saveRequestButton = entryForm.GetButton("SAVEREQUEST"); saveRequestButton.Invoke(); //enter and save details including autoload var saveRequestForm = testApplication.GetSubObjectEntryViewModel(entryForm); var detailsEntered = new SaveAndLoadFields() { Name = "TestName" }; testApplication.EnterAndSaveObject(detailsEntered, saveRequestForm); Assert.IsFalse(entryForm.ChildForms.Any()); Assert.IsFalse(entryForm.LoadingViewModel.IsLoading); //reopen app/dialog testApplication = CreateThisApp(); entryForm = testApplication.NavigateToDialogModuleEntryForm <TestSavedRequestModule, TestSavedRequestDialog>(); //invoke load request dialog var loadRequestButton = entryForm.GetButton("LOADREQUEST"); loadRequestButton.Invoke(); var loadRequestForm = testApplication.GetSubObjectEntryViewModel(entryForm); //verify there is a saved request and trigger the generate bat button var subGrid = loadRequestForm.GetEnumerableFieldViewModel(nameof(SavedSettings.SavedRequests)); Assert.IsTrue(subGrid.GridRecords.Count() == 1); subGrid.GridRecords.First().IsSelected = true; var generateBatButton = subGrid.DynamicGridViewModel.GetButton("GENERATEBAT"); generateBatButton.Invoke(); var testFiles = FileUtility.GetFiles(TestingFolder); Assert.AreEqual(1, testFiles.Count()); Assert.IsTrue(testFiles.First().EndsWith(".bat")); var batContent = File.ReadAllText(testFiles.First()); var args = ConsoleTestUtility.CommandLineToArgs(batContent) .Skip(1) .ToArray(); var arguments = ConsoleApplication.ParseCommandLineArguments(args); var applicationName = arguments.ContainsKey("SettingsFolderName") ? arguments["SettingsFolderName"] : "Unknown Console Context"; //okay need to create app var dependencyResolver = new PrismDependencyContainer(new UnityContainer()); var controller = new ConsoleApplicationController(applicationName, dependencyResolver); settingsManager = new PrismSettingsManager(controller); var applicationOptions = new ApplicationOptionsViewModel(controller); var app = new ConsoleApplication(controller, applicationOptions, settingsManager); //load modules in folder path app.LoadModulesInExecutionFolder(); //run app app.Run(args); }