private Func <ComposablePartDefinition, AtomicCompositionQueryState> GetAtomicCompositionQuery(AtomicComposition atomicComposition) { Func <ComposablePartDefinition, AtomicCompositionQueryState> atomicCompositionQuery; atomicComposition.TryGetValue(this, out atomicCompositionQuery); if (atomicCompositionQuery == null) { return((definition) => AtomicCompositionQueryState.Unknown); } return(atomicCompositionQuery); }
public void SetValue_Reference_ShouldBeAllowed() { var ct = new AtomicComposition(); var sb = new StringBuilder(); ct.SetValue(ct, sb); StringBuilder value; Assert.True(ct.TryGetValue(ct, out value)); Assert.Equal(sb, value); }
public void AfterComplete_AllMethodsShouldThrow() { var ct = new AtomicComposition(); ct.Complete(); Assert.Throws <InvalidOperationException>(() => ct.AddCompleteAction(() => ct = null)); Assert.Throws <InvalidOperationException>(() => ct.Complete()); Assert.Throws <InvalidOperationException>(() => ct.SetValue(ct, 10)); object value; Assert.Throws <InvalidOperationException>(() => ct.TryGetValue(ct, out value)); }
public void Dispose_AllMethodsShouldThrow() { var ct = new AtomicComposition(); ct.Dispose(); Assert.Throws <ObjectDisposedException>(() => ct.AddCompleteAction(() => ct = null)); Assert.Throws <ObjectDisposedException>(() => ct.Complete()); Assert.Throws <ObjectDisposedException>(() => ct.SetValue(ct, 10)); object value; Assert.Throws <ObjectDisposedException>(() => ct.TryGetValue(ct, out value)); }
public void Complete_ShouldCopyValuesToInner() { var innerAtomicComposition = new AtomicComposition(); object value; using (var ct = new AtomicComposition(innerAtomicComposition)) { ct.SetValue(this, 21); Assert.False(innerAtomicComposition.TryGetValue(this, out value)); ct.Complete(); Assert.True(innerAtomicComposition.TryGetValue(this, out value)); Assert.Equal(21, value); } // reverify after dispose Assert.True(innerAtomicComposition.TryGetValue(this, out value)); Assert.Equal(21, value); }
public void SetValue_ChangeOuterValuesWhileHaveInner_ShouldThrow() { var ct = new AtomicComposition(); var ct2 = new AtomicComposition(ct); var key = new object(); Assert.Throws <InvalidOperationException>(() => ct.SetValue(key, 1)); object value; Assert.False(ct2.TryGetValue(key, out value)); Assert.False(ct.TryGetValue(key, out value)); // remove the inner atomicComposition so the outer one becomes unlocked. ct2.Dispose(); ct.SetValue(key, 2); Assert.True(ct.TryGetValue(key, out value)); Assert.Equal(2, value); }
public void SetValue_CauseResize_ShouldWorkFine() { var ct = new AtomicComposition(); var keys = new List <object>(); var values = new List <object>(); for (int i = 0; i < 20; i++) { var key = new object(); keys.Add(key); values.Add(i); ct.SetValue(key, i); } for (int i = 0; i < keys.Count; i++) { object value; Assert.True(ct.TryGetValue(keys[i], out value)); Assert.Equal(i, value); } }
private PartQueryStateNode?GetPartQueryStateNode(AtomicComposition atomicComposition) { atomicComposition.TryGetValue(this, out PartQueryStateNode? node); return(node); }
private void TestNoValue(AtomicComposition context, object key) { string value; Assert.False(context.TryGetValue(key, out value)); }