public async Task DebugPageViewModel_PropertyChange()
        {
            var unconfiguredProvider = new TestUnconfiguredPropertyProvider();
            var profiles             = new List <ILaunchProfile>()
            {
                { new LaunchProfile()
                  {
                      Name = "p1", CommandName = "test", DoNotPersist = true
                  } }
            };

            var viewModelData = new ViewModelData()
            {
                UnconfiguredProvider = unconfiguredProvider,
                Profiles             = profiles,
                UIProviders          = new List <Lazy <ILaunchSettingsUIProvider, IOrderPrecedenceMetadataView> >()
                {
                    { new Lazy <ILaunchSettingsUIProvider, IOrderPrecedenceMetadataView>(() =>
                        {
                            var uiProvider = new Mock <ILaunchSettingsUIProvider>();
                            uiProvider.Setup(m => m.CustomUI).Returns((UserControl)null);
                            uiProvider.Setup(m => m.ShouldEnableProperty(It.IsAny <string>())).Returns(true);
                            uiProvider.Setup(m => m.CommandName).Returns("test");
                            return(uiProvider.Object);
                        }, new Mock <IOrderPrecedenceMetadataView>().Object) }
                }
            };

            var viewModel = CreateViewModel(viewModelData);
            await viewModel.Object.Initialize();

            await viewModelData.FirstSnapshotComplete.Task;

            Assert.True(viewModel.Object.HasProfiles);
            Assert.True(viewModel.Object.IsProfileSelected);
            Assert.True(viewModel.Object.SelectedDebugProfile.IsInMemoryObject());

            // Change a property, should trigger the selected profile to no longer be in-memory
            viewModel.Object.CommandLineArguments = "-arg";
            Assert.False(viewModel.Object.SelectedDebugProfile.IsInMemoryObject());
        }
        public async Task DebugPageViewModel_NoProfiles()
        {
            var unconfiguredProvider = new TestUnconfiguredPropertyProvider();
            var profiles             = new List <ILaunchProfile>();

            var viewModelData = new ViewModelData()
            {
                UnconfiguredProvider = unconfiguredProvider,
                Profiles             = profiles,
            };

            var viewModel = CreateViewModel(viewModelData);
            await viewModel.Object.Initialize();

            Assert.False(viewModel.Object.HasProfiles);
            Assert.False(viewModel.Object.IsProfileSelected);
            Assert.False(viewModel.Object.SupportsExecutable);
            Assert.False(viewModel.Object.HasLaunchOption);
            Assert.Equal(string.Empty, viewModel.Object.WorkingDirectory);
            Assert.Equal(string.Empty, viewModel.Object.LaunchPage);
            Assert.Equal(string.Empty, viewModel.Object.ExecutablePath);
            Assert.Equal(string.Empty, viewModel.Object.CommandLineArguments);
        }