Browse Source

Merge branch 'master' into core2d-leak

pull/467/head
Steven Kirk 11 years ago
parent
commit
17e4583328
  1. 11
      src/Markup/Perspex.Markup/Data/ExpressionObserver.cs
  2. 4
      src/Perspex.Styling/Styling/ActivatedObservable.cs
  3. 21
      tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Lifetime.cs
  4. 3
      tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Property.cs

11
src/Markup/Perspex.Markup/Data/ExpressionObserver.cs

@ -197,11 +197,11 @@ namespace Perspex.Markup.Data
if (_rootObservable != null)
{
source = source.TakeUntil(Complete(_rootObservable));
source = source.TakeUntil(_rootObservable.LastOrDefaultAsync());
}
else if (_update != null)
{
source = source.TakeUntil(Complete(_update));
source = source.TakeUntil(_update.LastOrDefaultAsync());
}
var subscription = source.Subscribe(observer);
@ -232,13 +232,6 @@ namespace Perspex.Markup.Data
}
}
private static IObservable<Unit> Complete<T>(IObservable<T> input)
{
return Observable.Merge(
input.TakeLast(1).Select(_ => Unit.Default),
input.IsEmpty().Where(x => x).Select(_ => Unit.Default));
}
private void IncrementCount()
{
if (_count++ == 0 && _node != null)

4
src/Perspex.Styling/Styling/ActivatedObservable.cs

@ -62,8 +62,8 @@ namespace Perspex.Styling
{
Contract.Requires<ArgumentNullException>(observer != null);
var sourceCompleted = Source.TakeLast(1).Select(_ => Unit.Default);
var activatorCompleted = Activator.TakeLast(1).Select(_ => Unit.Default);
var sourceCompleted = Source.LastOrDefaultAsync().Select(_ => Unit.Default);
var activatorCompleted = Activator.LastOrDefaultAsync().Select(_ => Unit.Default);
var completed = sourceCompleted.Merge(activatorCompleted);
return Activator

21
tests/Perspex.Markup.UnitTests/Data/ExpressionObserverTests_Lifetime.cs

@ -13,7 +13,7 @@ namespace Perspex.Markup.UnitTests.Data
{
public class ExpressionObserverTests_Lifetime
{
[Fact(Skip = "Not working yet")]
[Fact]
public void Should_Complete_When_Source_Observable_Completes()
{
var source = new BehaviorSubject<object>(1);
@ -26,6 +26,19 @@ namespace Perspex.Markup.UnitTests.Data
Assert.True(completed);
}
[Fact]
public void Should_Complete_When_Update_Observable_Completes()
{
var update = new Subject<Unit>();
var target = new ExpressionObserver(() => 1, "Foo", update);
var completed = false;
target.Subscribe(_ => { }, () => completed = true);
update.OnCompleted();
Assert.True(completed);
}
[Fact]
public void Should_Unsubscribe_From_Source_Observable()
{
@ -42,8 +55,7 @@ namespace Perspex.Markup.UnitTests.Data
}
Assert.Equal(new[] { PerspexProperty.UnsetValue, "foo" }, result);
Assert.Equal(1, source.Subscriptions.Count);
Assert.NotEqual(Subscription.Infinite, source.Subscriptions[0].Unsubscribe);
Assert.All(source.Subscriptions, x => Assert.NotEqual(Subscription.Infinite, x.Unsubscribe));
}
[Fact]
@ -61,8 +73,7 @@ namespace Perspex.Markup.UnitTests.Data
}
Assert.Equal(new[] { "foo" }, result);
Assert.Equal(1, update.Subscriptions.Count);
Assert.NotEqual(Subscription.Infinite, update.Subscriptions[0].Unsubscribe);
Assert.All(update.Subscriptions, x => Assert.NotEqual(Subscription.Infinite, x.Unsubscribe));
}
[Fact]

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

@ -250,8 +250,7 @@ namespace Perspex.Markup.UnitTests.Data
}
Assert.Equal(new[] { PerspexProperty.UnsetValue, "foo", "bar" }, result);
Assert.Equal(1, source.Subscriptions.Count);
Assert.NotEqual(Subscription.Infinite, source.Subscriptions[0].Unsubscribe);
Assert.All(source.Subscriptions, x => Assert.NotEqual(Subscription.Infinite, x.Unsubscribe));
}
[Fact]

Loading…
Cancel
Save