public void TryGetItem_CaseSensitive_ReturnsCorrectItem()
        {
            // Arrange
            var manager = new TestItemManager();
            var item1   = manager.GetOrCreateItem("abc", item => item.Value = 1);
            var item2   = manager.GetOrCreateItem("ABC", item => item.Value = 2);

            // Act
            var actual1 = manager.TryGetItem("abc");
            var actual2 = manager.TryGetItem("ABC");
            var actual3 = manager.TryGetItem("aBc");

            // Assert
            item1.Should().NotBeNull();
            item2.Should().NotBeNull();
            item1.Should().NotBeSameAs(item2);

            actual1.Should().NotBeNull();
            actual1.Should().BeSameAs(item1);

            actual2.Should().NotBeNull();
            actual2.Should().BeSameAs(item2);

            actual3.Should().BeNull();
        }
        public void GetOrCreateItem_CreatesNew_PreviouslyRemovedItem()
        {
            // Arrange
            var manager = new TestItemManager();

            // Act
            var item1 = manager.GetOrCreateItem(
                "abc",
                item =>
            {
                Assert.Equal(0, item.Value);
                item.Value = 1;
            });

            Assert.True(manager.TryRemoveItem("abc"));
            var item2 = manager.GetOrCreateItem(
                "abc",
                item =>
            {
                Assert.Equal(0, item.Value);
                item.Value = 2;
            });

            // Assert
            Assert.NotNull(item1);
            Assert.Equal("abc", item1.ItemId);
            Assert.Equal(1, item1.Value);

            Assert.NotNull(item2);
            Assert.Equal("abc", item2.ItemId);
            Assert.Equal(2, item2.Value);
        }
        public void GetOrCreateItem_ReusesAndReinitializes_ExistingItem()
        {
            // Arrange
            var manager = new TestItemManager();

            // Act
            var item1 = manager.GetOrCreateItem(
                "abc",
                item =>
            {
                item.Value.Should().Be(0);
                item.Value = 1;
            });
            var item2 = manager.GetOrCreateItem(
                "abc",
                item =>
            {
                item.Value.Should().Be(1);
                item.Value = 2;
            });

            // Assert
            item1.Should().NotBeNull();
            item1.ItemId.Should().Be("abc");
            item1.Value.Should().Be(2);
            item1.Should().BeSameAs(item2);
        }
        public void TryGetItem_CaseSensitive_ReturnsCorrectItem()
        {
            // Arrange
            var manager = new TestItemManager();
            var item1   = manager.GetOrCreateItem("abc", item => item.Value = 1);
            var item2   = manager.GetOrCreateItem("ABC", item => item.Value = 2);

            // Act
            var actual1 = manager.TryGetItem("abc");
            var actual2 = manager.TryGetItem("ABC");
            var actual3 = manager.TryGetItem("aBc");

            // Assert
            Assert.NotNull(item1);
            Assert.NotNull(item2);
            Assert.NotSame(item2, item1);

            Assert.NotNull(actual1);
            Assert.Same(item1, actual1);

            Assert.NotNull(actual2);
            Assert.Same(item2, actual2);

            Assert.Null(actual3);
        }
        public void GetOrCreateItem_CreatesNew_PreviouslyRemovedItem()
        {
            // Arrange
            var manager = new TestItemManager();

            // Act
            var item1 = manager.GetOrCreateItem(
                "abc",
                item =>
            {
                item.Value.Should().Be(0);
                item.Value = 1;
            });

            manager.TryRemoveItem("abc").Should().BeTrue();
            var item2 = manager.GetOrCreateItem(
                "abc",
                item =>
            {
                item.Value.Should().Be(0);
                item.Value = 2;
            });

            // Assert
            item1.Should().NotBeNull();
            item1.ItemId.Should().Be("abc");
            item1.Value.Should().Be(1);

            item2.Should().NotBeNull();
            item2.ItemId.Should().Be("abc");
            item2.Value.Should().Be(2);
        }
        public void GetOrCreateItem_ReusesAndReinitializes_ExistingItem()
        {
            // Arrange
            var manager = new TestItemManager();

            // Act
            var item1 = manager.GetOrCreateItem(
                "abc",
                item =>
            {
                Assert.Equal(0, item.Value);
                item.Value = 1;
            });
            var item2 = manager.GetOrCreateItem(
                "abc",
                item =>
            {
                Assert.Equal(1, item.Value);
                item.Value = 2;
            });

            // Assert
            Assert.NotNull(item1);
            Assert.Equal("abc", item1.ItemId);
            Assert.Equal(2, item1.Value);
            Assert.Same(item2, item1);
        }
        public void TryGetItem_NonExistentItem_ReturnsNull()
        {
            var manager = new TestItemManager();

            var item = manager.TryGetItem("abc");

            Assert.Null(item);
        }
        public void GetItems_Works_Empty()
        {
            var manager = new TestItemManager();

            var items = manager.GetItems();

            Assert.Empty(items);
        }
        public void GetOrCreateItem_DoesNotAdd_WhenSetupActionThrows()
        {
            var manager = new TestItemManager();

            Action action = () => manager.GetOrCreateItem("abc", item => throw new Exception());

            Assert.Throws <Exception>(action);
            Assert.Empty(manager.GetItems());
        }
        public void GetItems_Works_OneItem()
        {
            var manager = new TestItemManager();

            var item  = manager.GetOrCreateItem("abc", item => { });
            var items = manager.GetItems();

            Assert.Single(items);
            Assert.Same(item, items[0]);
        }
Exemplo n.º 11
0
        public void GetItems_Works_Empty()
        {
            // Arrange
            var manager = new TestItemManager();

            // Act
            var items = manager.GetItems();

            // Assert
            Assert.Empty(items);
        }
Exemplo n.º 12
0
        public void TryGetItem_NonExistentItem_ReturnsNull()
        {
            // Arrange
            var manager = new TestItemManager();

            // Act
            var item = manager.TryGetItem("abc");

            // Assert
            Assert.Null(item);
        }
        public void TryRemoveItem_Works()
        {
            var manager = new TestItemManager();

            var item    = manager.GetOrCreateItem("abc", item => { });
            var result1 = manager.TryRemoveItem("abc");
            var result2 = manager.TryRemoveItem("abc");

            Assert.True(result1);
            Assert.False(result2);
        }
Exemplo n.º 14
0
        public void GetItems_Works_Empty()
        {
            // Arrange
            var manager = new TestItemManager();

            // Act
            var items = manager.GetItems();

            // Assert
            items.Should().BeEmpty();
        }
Exemplo n.º 15
0
        public void GetOrCreateItem_DoesNotAdd_WhenSetupActionThrows()
        {
            // Arrange
            var manager = new TestItemManager();

            // Act
            Action action = () => manager.GetOrCreateItem("abc", item => throw new Exception());

            // Assert
            action.Should().ThrowExactly <Exception>();
            manager.GetItems().Should().BeEmpty();
        }
        public void TryGetItem_ExistingItem_Works()
        {
            var manager = new TestItemManager();

            manager.GetOrCreateItem("abc", item => item.Value = 1);

            var item = manager.TryGetItem("abc");

            Assert.NotNull(item);
            Assert.Equal("abc", item.ItemId);
            Assert.Equal(1, item.Value);
        }
        public void GetItems_Works_TwoItems()
        {
            var manager = new TestItemManager();

            var item1 = manager.GetOrCreateItem("abc", item => { });
            var item2 = manager.GetOrCreateItem("def", item => { });
            var items = manager.GetItems();

            Assert.Equal(2, items.Count);
            Assert.Contains(item1, items);
            Assert.Contains(item2, items);
        }
Exemplo n.º 18
0
        public void GetItems_Works_OneItem()
        {
            // Arrange
            var manager = new TestItemManager();

            // Act
            var item  = manager.GetOrCreateItem("abc", item => { });
            var items = manager.GetItems();

            // Assert
            items.Should().HaveCount(1);
            items[0].Should().BeSameAs(item);
        }
Exemplo n.º 19
0
        public void TryRemoveItem_Works()
        {
            // Arrange
            var manager = new TestItemManager();

            // Act
            var item    = manager.GetOrCreateItem("abc", item => { });
            var result1 = manager.TryRemoveItem("abc");
            var result2 = manager.TryRemoveItem("abc");

            // Assert
            result1.Should().BeTrue();
            result2.Should().BeFalse();
        }
        public void GetOrCreateItem_CreatesAndInitializes_NonExistentItem()
        {
            var manager = new TestItemManager();

            var item1 = manager.GetOrCreateItem("abc", item => item.Value = 1);
            var item2 = manager.GetOrCreateItem("def", item => item.Value = 2);

            Assert.NotNull(item1);
            Assert.Equal("abc", item1.ItemId);
            Assert.Equal(1, item1.Value);

            Assert.NotNull(item2);
            Assert.Equal("def", item2.ItemId);
            Assert.Equal(2, item2.Value);
        }
Exemplo n.º 21
0
        public void GetItems_Works_TwoItems()
        {
            // Arrange
            var manager = new TestItemManager();

            // Act
            var item1 = manager.GetOrCreateItem("abc", item => { });
            var item2 = manager.GetOrCreateItem("def", item => { });
            var items = manager.GetItems();

            // Assert
            items.Should().HaveCount(2);
            items.Should().Contain(item1);
            items.Should().Contain(item2);
        }
Exemplo n.º 22
0
        public void TryGetItem_ExistingItem_Works()
        {
            // Arrange
            var manager = new TestItemManager();

            manager.GetOrCreateItem("abc", item => item.Value = 1);

            // Act
            var item = manager.TryGetItem("abc");

            // Assert
            item.Should().NotBeNull();
            item.ItemId.Should().Be("abc");
            item.Value.Should().Be(1);
        }
        public void GetOrCreateItem_ThreadSafety()
        {
            const int Iterations = 100_000;
            var       manager    = new TestItemManager();

            Parallel.For(0, Iterations, i =>
            {
                manager.GetOrCreateItem("abc", item => item.Value++);
            });

            var item = manager.TryGetItem("abc");

            Assert.NotNull(item);
            Assert.Equal("abc", item.ItemId);
            Assert.Equal(Iterations, item.Value);
        }
Exemplo n.º 24
0
        public void Items_Notifications_Work()
        {
            // Arrange
            var manager          = new TestItemManager();
            var itemsCountSignal = manager.Items.Select(items => items.Count);

            // Act
            manager.GetOrCreateItem("abc", item => { });
            manager.GetOrCreateItem("def", item => { });

            Assert.Equal(2, itemsCountSignal.Value);

            manager.TryRemoveItem("abc");
            manager.TryRemoveItem("def");

            Assert.Equal(0, itemsCountSignal.Value);
        }
Exemplo n.º 25
0
        public void GetOrCreateItem_CreatesAndInitializes_NonExistentItem()
        {
            // Arrange
            var manager = new TestItemManager();

            // Act
            var item1 = manager.GetOrCreateItem("abc", item => item.Value = 1);
            var item2 = manager.GetOrCreateItem("def", item => item.Value = 2);

            // Assert
            item1.Should().NotBeNull();
            item1.ItemId.Should().Be("abc");
            item1.Value.Should().Be(1);

            item2.Should().NotBeNull();
            item2.ItemId.Should().Be("def");
            item2.Value.Should().Be(2);
        }
Exemplo n.º 26
0
        public void GetOrCreateItem_ThreadSafety()
        {
            // Arrange
            const int Iterations = 100_000;
            var       manager    = new TestItemManager();

            // Act
            Parallel.For(0, Iterations, i =>
            {
                manager.GetOrCreateItem("abc", item => item.Value++);
            });

            // Assert
            var item = manager.TryGetItem("abc");

            item.Should().NotBeNull();
            item.ItemId.Should().Be("abc");
            item.Value.Should().Be(Iterations);
        }
        public void TryGetItem_CaseInsensitive_ReturnsSameItem()
        {
            var manager = new TestItemManager();
            var item1   = manager.GetOrCreateItem("abc", item => item.Value = 1);
            var item2   = manager.GetOrCreateItem("ABC", item => item.Value = 2);

            var actual1 = manager.TryGetItem("abc");
            var actual2 = manager.TryGetItem("ABC");
            var actual3 = manager.TryGetItem("aBc");

            Assert.NotNull(item1);
            Assert.NotNull(item2);

            Assert.NotNull(actual1);
            Assert.NotNull(actual2);
            Assert.NotNull(actual3);

            Assert.Same(item1, item2);
            Assert.Same(item2, actual1);
            Assert.Same(actual1, actual2);
            Assert.Same(actual2, actual3);
        }