Example #1
0
        public async Task BindingSources()
        {
            var target   = new object();
            var property = GetBasicProperty();
            var editor   = GetBasicEditor(target, property.Object);

            var editorProvider = new MockEditorProvider(editor.Object);

            var sources = new[] {
                new BindingSource("Short Description", BindingSourceType.Object, "Short Description"),
                new BindingSource("Long Description", BindingSourceType.Object, "Long Description"),
            };

            var bpmock = new Mock <IBindingProvider> ();

            bpmock.Setup(bp => bp.GetBindingSourcesAsync(target, property.Object)).ReturnsAsync(sources);
            bpmock.Setup(bp => bp.GetRootElementsAsync(sources[0], target)).ReturnsAsync(new[] { new object(), new object() });
            bpmock.Setup(bp => bp.GetRootElementsAsync(sources[1], target)).ReturnsAsync(new[] { new object() });
            bpmock.Setup(bp => bp.GetValueConverterResourcesAsync(It.IsAny <object> ())).ReturnsAsync(new Resource[0]);

            var vm = new CreateBindingViewModel(new TargetPlatform(editorProvider, bpmock.Object), editor.Object, property.Object);

            Assert.That(vm.BindingSources, Is.Not.Null);

            var requested = await vm.BindingSources.Task;

            CollectionAssert.AreEqual(sources, requested);

            Assert.That(vm.SelectedBindingSource, Is.EqualTo(sources[0]));
        }
Example #2
0
        public async Task ResourceRoots()
        {
            object target    = new object();
            var    property  = GetBasicProperty();
            var    editor    = GetBasicEditor(target, property.Object);
            var    resources = new MockResourceProvider();
            var    bindings  = GetBasicBindingProvider(target, property.Object);
            var    source    = new BindingSource("Resources", BindingSourceType.Resource);

            bindings.Setup(bp => bp.GetBindingSourcesAsync(target, property.Object)).ReturnsAsync(new[] { source });
            bindings.Setup(bp => bp.GetResourcesAsync(source, target))
            .Returns <BindingSource, object> (async(bs, t) => {
                var rs = await resources.GetResourcesAsync(target, CancellationToken.None);
                return(rs.ToLookup(r => r.Source));
            });

            var vm = new CreateBindingViewModel(
                new TargetPlatform(new MockEditorProvider(editor.Object), resources, bindings.Object), editor.Object,
                property.Object);

            Assume.That(vm.SelectedBindingSource, Is.EqualTo(source));

            Assert.That(vm.SourceResources, Is.Not.Null);
            await vm.SourceResources.Task;

            Assert.That(vm.SourceResources.Value.First().Key, Is.EqualTo(DefaultResourceSources[0]));
        }
Example #3
0
        public async Task BindingSourceObjectRoots()
        {
            var target   = new object();
            var property = GetBasicProperty();
            var editor   = GetBasicEditor(target, property.Object);

            var editorProvider = new MockEditorProvider(editor.Object);

            var sources = new[] {
                new BindingSource("Short Description", BindingSourceType.Object, "Short Description"),
                new BindingSource("Long Description", BindingSourceType.Object, "Long Description"),
            };

            var shortRoots = new[] { new object(), new object() };

            var bpmock = new Mock <IBindingProvider> ();

            bpmock.Setup(bp => bp.GetBindingSourcesAsync(target, property.Object)).ReturnsAsync(sources);
            bpmock.Setup(bp => bp.GetRootElementsAsync(sources[0], target)).ReturnsAsync(shortRoots);
            bpmock.Setup(bp => bp.GetRootElementsAsync(sources[1], target)).ReturnsAsync(new[] { new object() });
            bpmock.Setup(bp => bp.GetValueConverterResourcesAsync(It.IsAny <object> ())).ReturnsAsync(new Resource[0]);

            var vm = new CreateBindingViewModel(new TargetPlatform(editorProvider, bpmock.Object), editor.Object, property.Object);
            await vm.BindingSources.Task;

            Assume.That(vm.SelectedBindingSource, Is.EqualTo(sources[0]));

            bpmock.Verify(bp => bp.GetRootElementsAsync(sources[0], target));
            IReadOnlyList <ObjectTreeElement> roots = await vm.ObjectElementRoots.Task;

            Assert.That(roots.Count, Is.EqualTo(2), "Unexpected number of roots");
            CollectionAssert.AreEqual(roots.Select(r => r.Editor.Target), shortRoots);
        }
        public CreateBindingWindow(IEnumerable <ResourceDictionary> merged, TargetPlatform platform, IObjectEditor editor, IPropertyInfo property)
        {
            var vm = new CreateBindingViewModel(platform, editor, property);

            vm.CreateValueConverterRequested += OnCreateValueConverterRequested;

            DataContext = vm;
            InitializeComponent();
            Resources.MergedDictionaries.AddItems(merged);
        }
Example #5
0
        public async Task Types()
        {
            object target    = new object();
            var    property  = GetBasicProperty();
            var    editor    = GetBasicEditor(target, property.Object);
            var    resources = new MockResourceProvider();
            var    source    = new BindingSource("Resources", BindingSourceType.Type);

            var type     = typeof(MockSampleControl).ToTypeInfo();
            var bindings = GetBasicBindingProvider(target, property.Object, sources: new[] { source });

            bindings.Setup(bp => bp.GetSourceTypesAsync(source, target))
            .ReturnsAsync(new AssignableTypesResult(new[] { type }));

            var provider = new MockEditorProvider(editor.Object);
            var vm       = new CreateBindingViewModel(new TargetPlatform(provider, resources, bindings.Object), editor.Object, property.Object);

            Assume.That(vm.SelectedBindingSource, Is.EqualTo(source));
            Assume.That(vm.TypeSelector, Is.Not.Null);

            while (vm.SelectedObjects.Count == 0 && vm.TypeSelector.IsLoading)
            {
                await Task.Delay(1);
            }

            var binding = (MockBinding)vm.SelectedObjects.First();

            Assert.That(vm.TypeSelector.SelectedType, Is.Null);

            bool propertyChanged = false;

            vm.PropertyChanged += (o, e) => {
                if (e.PropertyName == nameof(CreateBindingViewModel.PropertyRoot))
                {
                    propertyChanged = true;
                }
            };

            vm.TypeSelector.SelectedType = type;
            Assert.That(propertyChanged, Is.True, "INPC didn't change for PropertyRoot on selected source param");
            Assert.That(vm.PropertyRoot, Is.Not.Null);
            Assert.That(binding.SourceParameter, Is.EqualTo(type));

            await vm.PropertyRoot.Task;

            CollectionAssert.AreEqual(provider.GetPropertiesForTypeAsync(type).Result,
                                      vm.PropertyRoot.Value.Children.Select(pe => pe.Property));
        }
        public async Task ValueConverters()
        {
            var target = new object();

            var property = GetBasicProperty();
            var editor   = GetBasicEditor(target, property.Object);

            const string objName  = "objName";
            var          nameable = editor.As <INameableObject> ();

            nameable.Setup(n => n.GetNameAsync()).ReturnsAsync(objName);

            var editorProvider = new MockEditorProvider(editor.Object);

            var sources = new[] {
                new BindingSource("Short Description", BindingSourceType.Object, "Short Description"),
                new BindingSource("Long Description", BindingSourceType.Object, "Long Description"),
            };

            var visi = new Resource("BooleanToVisibilityConverter");

            var bpmock = new Mock <IBindingProvider> ();

            bpmock.Setup(bp => bp.GetBindingSourcesAsync(target, property.Object)).ReturnsAsync(sources);
            bpmock.Setup(bp => bp.GetRootElementsAsync(sources[0], target)).ReturnsAsync(new[] { new object(), new object() });
            bpmock.Setup(bp => bp.GetRootElementsAsync(sources[1], target)).ReturnsAsync(new[] { new object() });
            bpmock.Setup(bp => bp.GetValueConverterResourcesAsync(It.IsAny <object> ())).ReturnsAsync(new [] { visi });

            var vm = new CreateBindingViewModel(new TargetPlatform(editorProvider, bpmock.Object), editor.Object, property.Object);

            Assert.That(vm.ValueConverters, Is.Not.Null);

            await vm.ValueConverters.Task;

            Assert.That(vm.ValueConverters.Value, Contains.Item(visi));

            if (vm.IncludeAddValueConverter)
            {
                Assert.That(vm.ValueConverters.Value.Count, Is.EqualTo(3));                   // visi, No Converter, Request Converter
            }
            else
            {
                Assert.That(vm.ValueConverters.Value.Count, Is.EqualTo(2));                   // visi, No Converter
            }
        }
Example #7
0
        public async Task PropertyRootChildren()
        {
            var target = new object();

            var property = new Mock <IPropertyInfo> ();

            property.SetupGet(p => p.ValueSources).Returns(ValueSources.Local | ValueSources.Binding);
            property.SetupGet(p => p.Type).Returns(typeof(object));
            property.SetupGet(p => p.Name).Returns("name");
            property.SetupGet(p => p.RealType).Returns(typeof(object).ToTypeInfo());
            property.SetupGet(p => p.CanWrite).Returns(true);

            var editor = GetBasicEditor(target, property.Object);

            var controlTarget = new MockWpfControl();
            var controlEditor = new MockObjectEditor(controlTarget);
            var provider      = new MockEditorProvider(controlEditor);

            var source = new BindingSource("Control", BindingSourceType.Object);
            var bpmock = new Mock <IBindingProvider> ();

            bpmock.Setup(bp => bp.GetBindingSourcesAsync(target, property.Object)).ReturnsAsync(new[] { source });
            bpmock.Setup(bp => bp.GetRootElementsAsync(source, target)).ReturnsAsync(new[] { controlTarget });
            bpmock.Setup(bp => bp.GetValueConverterResourcesAsync(It.IsAny <object> ())).ReturnsAsync(new Resource[0]);

            var vm = new CreateBindingViewModel(new TargetPlatform(provider, bpmock.Object), editor.Object, property.Object);

            Assume.That(vm.SelectedBindingSource, Is.EqualTo(source));
            Assume.That(vm.PropertyRoot, Is.Not.Null);
            await vm.PropertyRoot.Task;

            var childrenProperty = controlEditor.Properties.First(p => p.Type == typeof(CommonThickness));
            var element          = vm.PropertyRoot.Value.Children.First(p => Equals(p.Property, childrenProperty));

            Assert.That(element.Children, Is.Not.Null);

            await element.Children.Task;
            var expected = await provider.GetPropertiesForTypeAsync(typeof(CommonThickness).ToTypeInfo());

            CollectionAssert.AreEqual(expected, element.Children.Value.Select(te => te.Property));
        }
Example #8
0
        public void PropertyDisplayNameable()
        {
            var          target   = new object();
            const string propName = "propertyName";
            var          property = GetBasicProperty(propName);
            var          editor   = GetBasicEditor(target, property.Object);

            const string objName  = "objName";
            var          nameable = editor.As <INameableObject> ();

            nameable.Setup(n => n.GetNameAsync()).ReturnsAsync(objName);

            var editorProvider = new MockEditorProvider(editor.Object);

            var bpmock = new Mock <IBindingProvider> ();

            var vm = new CreateBindingViewModel(new TargetPlatform(editorProvider, bpmock.Object), editor.Object, property.Object);

            Assert.That(vm.PropertyDisplay, Does.Not.Contains("Object"));
            Assert.That(vm.PropertyDisplay, Contains.Substring(objName));
            Assert.That(vm.PropertyDisplay, Contains.Substring(propName));
        }
Example #9
0
        public async Task ResourceProperties()
        {
            object target    = new object();
            var    property  = GetBasicProperty();
            var    editor    = GetBasicEditor(target, property.Object);
            var    resources = new MockResourceProvider();
            var    source    = new BindingSource("Resources", BindingSourceType.Resource);
            var    bindings  = GetBasicBindingProvider(target, property.Object, sources: new [] { source });

            bindings.Setup(bp => bp.GetResourcesAsync(source, target))
            .Returns <BindingSource, object> (async(bs, t) => {
                var rs = await resources.GetResourcesAsync(target, CancellationToken.None);
                return(rs.ToLookup(r => r.Source));
            });

            var vm = new CreateBindingViewModel(
                new TargetPlatform(new MockEditorProvider(editor.Object), resources, bindings.Object), editor.Object,
                property.Object);

            Assume.That(vm.SelectedBindingSource, Is.EqualTo(source));
            Assume.That(vm.SourceResources, Is.Not.Null);
            await vm.SourceResources.Task;

            while (vm.SelectedObjects.Count == 0)
            {
                await Task.Delay(1);
            }

            var binding = (MockBinding)vm.SelectedObjects.First();

            vm.SelectedResource = vm.SourceResources.Value.First().OfType <Resource <CommonSolidBrush> >().First();
            Assert.That(binding.SourceParameter, Is.EqualTo(vm.SelectedResource));
            Assume.That(vm.PropertyRoot, Is.Not.Null);
            await vm.PropertyRoot.Task;

            Assert.That(vm.PropertyRoot.Value.TargetType, Is.EqualTo(typeof(CommonSolidBrush).ToTypeInfo()));
            CollectionAssert.AreEqual(ReflectionEditorProvider.GetPropertiesForType(typeof(CommonSolidBrush)),
                                      vm.PropertyRoot.Value.Children.Select(pe => pe.Property));
        }
Example #10
0
        public void PropertyDisplayType()
        {
            var target = new object();

            const string propName = "propertyName";
            var          property = GetBasicProperty(propName);

            var editor = new Mock <IObjectEditor> ();

            editor.SetupGet(e => e.Properties).Returns(new[] { property.Object });
            editor.SetupGet(e => e.Target).Returns(target);
            editor.SetupGet(e => e.TargetType).Returns(typeof(object).ToTypeInfo());

            var editorProvider = new MockEditorProvider(editor.Object);

            var bpmock = new Mock <IBindingProvider> ();

            var vm = new CreateBindingViewModel(new TargetPlatform(editorProvider, bpmock.Object), editor.Object, property.Object);

            Assert.That(vm.PropertyDisplay, Contains.Substring("Object"));
            Assert.That(vm.PropertyDisplay, Contains.Substring(propName));
        }