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 }));
        }
Esempio n. 2
0
        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") }));
        }
Esempio n. 3
0
        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");
        }