public void ContentHasSingleValue_ReturnsListOfInt32()
            {
                // Arrange
                var content = "30";

                // Act
                var listOfInt32 = NecroDancerDataReader.ReadListOfInt32(content);

                // Assert
                Assert.Equal(new[] { 30 }, listOfInt32.ToList());
            }
            public void ContentIsNotBooleanLike_ThrowsInvalidCastException()
            {
                // Arrange
                var content = "";

                // Act -> Assert
                Assert.Throws <InvalidCastException>(() =>
                {
                    NecroDancerDataReader.ReadBooleanLike(content);
                });
            }
            public void ContentHasMultipleValues_ReturnsListOfInt32()
            {
                // Arrange
                var content = "0|30|40";

                // Act
                var listOfInt32 = NecroDancerDataReader.ReadListOfInt32(content);

                // Assert
                Assert.Equal(new[] { 0, 30, 40 }, listOfInt32.ToList());
            }
            public void ContentIsFalse_ReturnsFalse()
            {
                // Arrange
                var content = "False";

                // Act
                var booleanLike = NecroDancerDataReader.ReadBooleanLike(content);

                // Assert
                Assert.False(booleanLike);
            }
            public void ReturnsNecroDancerDataReader()
            {
                // Arrange
                var stream = Stream.Null;

                // Act
                var reader = new NecroDancerDataReader(stream);

                // Assert
                Assert.IsAssignableFrom <NecroDancerDataReader>(reader);
            }
            public void ContentIsEmptyString_ReturnsDisplayStringWithTextSetToContent()
            {
                // Arrange
                var content = "";

                // Act
                var displayString = NecroDancerDataReader.ReadDisplayString(content);

                // Assert
                Assert.IsAssignableFrom <DisplayString>(displayString);
                Assert.Null(displayString.Id);
                Assert.Equal("", displayString.Text);
            }
            public void ContentIsIdAndText_ReturnsDisplayStringWithIdAndTextSet()
            {
                // Arrange
                var content = "|314|+1 BLACK CHEST PER RUN|";

                // Act
                var displayString = NecroDancerDataReader.ReadDisplayString(content);

                // Assert
                Assert.IsAssignableFrom <DisplayString>(displayString);
                Assert.Equal(314, displayString.Id);
                Assert.Equal("+1 BLACK CHEST PER RUN", displayString.Text);
            }
            public void ReturnsNecroDancerData()
            {
                // Arrange
                var stream = new MemoryStream(Encoding.UTF8.GetBytes(Resources.NecroDancerData));
                var reader = new NecroDancerDataReader(stream);

                // Act
                var necroDancerData = reader.Read();

                // Assert
                Assert.IsAssignableFrom <NecroDancerData>(necroDancerData);
                Assert.Equal(291, necroDancerData.Items.Count);
                Assert.Equal(216, necroDancerData.Enemies.Count);
                Assert.Equal(15, necroDancerData.Characters.Count);
                Assert.Equal(1, necroDancerData.Modes.Count);
            }
            public void MatchesNecroDancerDataBaseline()
            {
                // Arrange
                var writeStream     = new MemoryStream();
                var writer          = new NecroDancerDataWriter(writeStream);
                var readStream      = new MemoryStream(Encoding.UTF8.GetBytes(Resources.NecroDancerData));
                var reader          = new NecroDancerDataReader(readStream);
                var necroDancerData = reader.Read();

                // Act
                writer.Write(necroDancerData);

                // Assert
                var sr = new StreamReader(writeStream);

                writeStream.Position = 0;
                var actual = sr.ReadToEnd();

                Assert.Equal(Resources.NecroDancerDataBaseline, actual, ignoreLineEndingDifferences: true);
            }