Browse Source

Added test for issue 284.

Moved NotifyingBase to Perspex.UnitTests in order to do this.
pull/484/head
Steven Kirk 10 years ago
parent
commit
93884ea063
  1. 4
      tests/Perspex.Controls.UnitTests/Perspex.Controls.UnitTests.csproj
  2. 76
      tests/Perspex.Controls.UnitTests/TreeViewTests.cs
  3. 1
      tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Indexer.cs
  4. 1
      tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Observable.cs
  5. 6
      tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Property.cs
  6. 1
      tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_SetValue.cs
  7. 1
      tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Task.cs
  8. 1
      tests/Perspex.Markup.UnitTests/Perspex.Markup.UnitTests.csproj
  9. 4
      tests/Perspex.UnitTests/NotifyingBase.cs
  10. 1
      tests/Perspex.UnitTests/Perspex.UnitTests.csproj

4
tests/Perspex.Controls.UnitTests/Perspex.Controls.UnitTests.csproj

@ -148,6 +148,10 @@
<Project>{3e53a01a-b331-47f3-b828-4a5717e77a24}</Project>
<Name>Perspex.Markup.Xaml</Name>
</ProjectReference>
<ProjectReference Include="..\..\src\Markup\Perspex.Markup\Perspex.Markup.csproj">
<Project>{6417e941-21bc-467b-a771-0de389353ce6}</Project>
<Name>Perspex.Markup</Name>
</ProjectReference>
<ProjectReference Include="..\..\src\Perspex.Animation\Perspex.Animation.csproj">
<Project>{D211E587-D8BC-45B9-95A4-F297C8FA5200}</Project>
<Name>Perspex.Animation</Name>

76
tests/Perspex.Controls.UnitTests/TreeViewTests.cs

@ -1,13 +1,16 @@
// Copyright (c) The Perspex Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
using System.Collections.Generic;
using System.Linq;
using Perspex.Collections;
using Perspex.Controls.Presenters;
using Perspex.Controls.Templates;
using Perspex.Data;
using Perspex.Input;
using Perspex.LogicalTree;
using Perspex.Markup.Data;
using Perspex.UnitTests;
using Xunit;
@ -252,6 +255,36 @@ namespace Perspex.Controls.UnitTests
Assert.NotNull(NameScope.GetNameScope((TreeViewItem)item));
}
[Fact]
public void Should_React_To_Children_Changing()
{
var data = CreateTestTreeData();
var target = new TreeView
{
Template = CreateTreeViewTemplate(),
Items = data,
DataTemplates = CreateNodeDataTemplate(),
};
ApplyTemplates(target);
Assert.Equal(new[] { "Root" }, ExtractItemHeader(target, 0));
Assert.Equal(new[] { "Child1", "Child2" }, ExtractItemHeader(target, 1));
Assert.Equal(new[] { "Grandchild2a" }, ExtractItemHeader(target, 2));
data[0].Children = new PerspexList<Node>
{
new Node
{
Value = "NewChild1",
}
};
Assert.Equal(new[] { "Root" }, ExtractItemHeader(target, 0));
Assert.Equal(new[] { "NewChild1" }, ExtractItemHeader(target, 1));
}
private void ApplyTemplates(TreeView tree)
{
tree.ApplyTemplate();
@ -303,9 +336,7 @@ namespace Perspex.Controls.UnitTests
{
return new DataTemplates
{
new FuncTreeDataTemplate<Node>(
x => new TextBlock { Text = x.Value },
x => x.Children),
new TestTreeDataTemplate()
};
}
@ -360,10 +391,45 @@ namespace Perspex.Controls.UnitTests
}
}
private class Node
private class Node : NotifyingBase
{
private IPerspexList<Node> _children;
public string Value { get; set; }
public IPerspexList<Node> Children { get; set; }
public IPerspexList<Node> Children
{
get
{
return _children;
}
set
{
_children = value;
RaisePropertyChanged(nameof(Children));
}
}
}
private class TestTreeDataTemplate : ITreeDataTemplate
{
public IControl Build(object param)
{
var node = (Node)param;
return new TextBlock { Text = node.Value };
}
public InstancedBinding ItemsSelector(object item)
{
var obs = new ExpressionObserver(item, nameof(Node.Children));
return new InstancedBinding(obs);
}
public bool Match(object data)
{
return data is Node;
}
}
}
}

1
tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Indexer.cs

@ -8,6 +8,7 @@ using System.Reactive.Linq;
using Perspex.Collections;
using Perspex.Diagnostics;
using Perspex.Markup.Data;
using Perspex.UnitTests;
using Xunit;
namespace Perspex.Markup.UnitTests.Data

1
tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Observable.cs

@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Reactive.Linq;
using System.Reactive.Subjects;
using Perspex.Markup.Data;
using Perspex.UnitTests;
using Xunit;
namespace Perspex.Markup.UnitTests.Data

6
tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Property.cs

@ -8,6 +8,7 @@ using System.Reactive.Linq;
using System.Reactive.Subjects;
using Microsoft.Reactive.Testing;
using Perspex.Markup.Data;
using Perspex.UnitTests;
using Xunit;
namespace Perspex.Markup.UnitTests.Data
@ -385,11 +386,6 @@ namespace Perspex.Markup.UnitTests.Data
RaisePropertyChanged(nameof(Next));
}
}
public void RaisePropertyChanged(string propertyName)
{
base.RaisePropertyChanged(propertyName);
}
}
private class Class2 : NotifyingBase, INext

1
tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_SetValue.cs

@ -5,6 +5,7 @@ using System;
using System.Collections.Generic;
using System.Reactive.Linq;
using Perspex.Markup.Data;
using Perspex.UnitTests;
using Xunit;
namespace Perspex.Markup.UnitTests.Data

1
tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Task.cs

@ -7,6 +7,7 @@ using System.Reactive.Linq;
using System.Threading;
using System.Threading.Tasks;
using Perspex.Markup.Data;
using Perspex.UnitTests;
using Xunit;
namespace Perspex.Markup.UnitTests.Data

1
tests/Perspex.Markup.UnitTests/Perspex.Markup.UnitTests.csproj

@ -96,7 +96,6 @@
<Compile Include="Data\ExpressionObserverTests_SetValue.cs" />
<Compile Include="Data\ExpressionObserverTests_Task.cs" />
<Compile Include="Data\ExpressionSubjectTests.cs" />
<Compile Include="Data\NotifyingBase.cs" />
<Compile Include="DefaultValueConverterTests.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="UnitTestSynchronizationContext.cs" />

4
tests/Perspex.Markup.UnitTests/Data/NotifyingBase.cs → tests/Perspex.UnitTests/NotifyingBase.cs

@ -4,7 +4,7 @@
using System.ComponentModel;
using System.Linq;
namespace Perspex.Markup.UnitTests.Data
namespace Perspex.UnitTests
{
public class NotifyingBase : INotifyPropertyChanged
{
@ -34,7 +34,7 @@ namespace Perspex.Markup.UnitTests.Data
private set;
}
protected void RaisePropertyChanged(string propertyName)
public void RaisePropertyChanged(string propertyName)
{
_propertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

1
tests/Perspex.UnitTests/Perspex.UnitTests.csproj

@ -62,6 +62,7 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="NotifyingBase.cs" />
<Compile Include="TestTemplatedRoot.cs" />
<Compile Include="TestRoot.cs" />
<Compile Include="TestServices.cs" />

Loading…
Cancel
Save