public async Task SetUp() { var project = Substitute.For <IProject>(); project.Classes.Returns(Observable.Return(new IElement[] { })); var context = Substitute.For <IContext>(); _currentSelection = new BehaviorSubject <IElement>(Element.Empty); _buttonClicked = false; context.CurrentSelection.Returns(_currentSelection.Switch()); _model = new ExtractClassButtonViewModel(project, context, dialogViewModel => { _buttonClicked = true; _resultingViewModel = dialogViewModel; }, new Shell(), Substitute.For <IClassExtractor>()); _root = CreateTree("<App><JavaScript /><Include /><Panel /><Circle ux:Class=\"MyClass\" /></App>"); _classElement = await GetTreeChild("Circle"); _instanceElement = await GetTreeChild("Panel"); _javaScriptElement = await GetTreeChild("JavaScript"); _includeElement = await GetTreeChild("Include"); project.Classes.Returns(Observable.Return(new[] { _classElement })); }
public async Task SetUp() { var project = Substitute.For <IProject>(); project.Classes.Returns(Observable.Return(new IElement[] { })); project.RootDirectory.Returns(Observable.Return(AbsoluteDirectoryPath.Parse("/project"))); var context = Substitute.For <IContext>(); _root = CreateTree(); _fileSystem = Substitute.For <IFileSystem>(); _fileSystem.Exists(Arg.Any <AbsoluteFilePath>()) .Returns( callInfo => { var absoluteFilePath = callInfo.Arg <AbsoluteFilePath>(); var result = absoluteFilePath == AbsoluteFilePath.Parse("/project/MainView.ux"); Console.WriteLine("FileSystem.Exists({0}) -> {1}", absoluteFilePath, result); return(result); }); var panel = await GetTreeChild("Panel"); _currentSelection = new BehaviorSubject <IElement>(panel); context.CurrentSelection.Returns(_currentSelection.Switch()); _classExtractor = new MockedClassExtractor(); _model = new ExtractClassViewModel( context: context, suggestedName: "MyPanel", allClassNames: Observable.Return(new HashSet <string>(new[] { "MyCircle" })), classExtractor: _classExtractor, fileSystem: _fileSystem, project: project); project.Classes.Returns(Observable.Return(new[] { await GetTreeChild("Circle") })); }
public static void OpenDialog( IModalHost modalHost, IExtractClassViewModel viewModel) { var toggleCreateInNewFile = viewModel.CreateInNewFile.Toggle(); var errorMsg = Label.Create( text: viewModel.UserInfo.AsText(), font: Theme.DescriptorFont, color: Theme.ErrorColor, lineBreakMode: LineBreakMode.TruncateTail) .CenterVertically() .WithHeight(26); var optionsPart = Layout.StackFromTop( Layout.Dock() .Left(CheckBox.Create(viewModel.CreateInNewFile, toggleCreateInNewFile) .CenterVertically() .WithPadding(right: new Points(4), top: new Points(1))) .Fill( Label.Create( "Extract to new file", Theme.DefaultFont, color: Theme.DefaultText) .OnMouse(pressed: toggleCreateInNewFile) .CenterVertically()) .WithHeight(22), Layout.Dock() .Left(Control.Empty.WithWidth(21)) .Fill( Label.Create( "Create a new .ux file for the class", Theme.DefaultFont, color: Theme.DescriptorText, lineBreakMode: LineBreakMode.TruncateTail)) .CenterVertically() .WithHeight(21), Layout.Dock() .Left(Control.Empty.WithWidth(21)) .Fill(ThemedTextBox.Create(viewModel.NewFileName)) .WithPadding(top: new Points(6), bottom: new Points(3)) ); var content = Layout.StackFromTop( Layout.Dock() .Left( Label.Create("ux:Class", Theme.DefaultFont, color: Theme.DefaultText) .CenterVertically().WithPadding(right: new Points(4))) .Fill(ThemedTextBox.Create(viewModel.ClassName)) .WithPadding(bottom: new Points(23)), optionsPart, errorMsg) .WithPadding(left: new Points(15), top: new Points(15), right: new Points(15)); modalHost.Open( confirm: viewModel.CreateCommand, fill: Layout.Dock() .Top( // Just use button as header for dialog CreateButton(Command.Enabled(() => {}), hoverColor: Theme.DefaultText)) .Fill(content), confirmText: "Create class", confirmTooltip: "Creates new UX class based on selected element"); }