Esempio n. 1
0
        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));
        }