public void VersionedStringBuilder_IsInitializedToSpecifiedString()
        {
            var builder = new VersionedStringBuilder("Hello, world!");

            TheResultingValue(builder.Version).ShouldBe(0);
            TheResultingString(builder.ToString()).ShouldBe("Hello, world!");
        }
        public void VersionedStringBuilder_VersionIsNotIncremented_WhenAppendStringBuilderIsCalled_AndValueIsNull()
        {
            var builder = new VersionedStringBuilder("Hello, world!");

            builder.Append((StringBuilder)null);

            TheResultingValue(builder.Version).ShouldBe(0);
            TheResultingString(builder.ToString()).ShouldBe("Hello, world!");
        }
        public void VersionedStringBuilder_VersionIsIncremented_WhenClearIsCalled()
        {
            var builder = new VersionedStringBuilder("Hello, world!");
            
            builder.Clear();

            TheResultingValue(builder.Version).ShouldBe(1);
            TheResultingString(builder.ToString()).ShouldBe(String.Empty);
        }
        public void VersionedStringBuilder_VersionIsIncremented_WhenAppendStringBuilderIsCalled()
        {
            var builder = new VersionedStringBuilder("Hello, world!");

            var value = new StringBuilder(" Goodbye, world!");
            builder.Append(value);

            TheResultingValue(builder.Version).ShouldBe(1);
            TheResultingString(builder.ToString()).ShouldBe("Hello, world! Goodbye, world!");
        }
        public void VersionedStringBuilder_VersionIsIncremented_WhenInsertCharIsCalled()
        {
            var builder = new VersionedStringBuilder("Hello, world!");

            var value = '!';
            builder.Insert(12, value);

            TheResultingValue(builder.Version).ShouldBe(1);
            TheResultingString(builder.ToString()).ShouldBe("Hello, world!!");
        }
        public void VersionedStringBuilder_VersionIsNotIncremented_WhenInsertVersionedStringSourceIsCalled_WithInvalidSource()
        {
            var builder = new VersionedStringBuilder("Hello, world!");

            var value = new VersionedStringSource();
            builder.Insert(5, value);

            TheResultingValue(builder.Version).ShouldBe(0);
            TheResultingString(builder.ToString()).ShouldBe("Hello, world!");
        }
        public void VersionedStringBuilder_VersionIsIncremented_WhenInsertVersionedStringSourceIsCalled_WithValidStringBuilderSource()
        {
            var builder = new VersionedStringBuilder("Hello, world!");

            var source = new VersionedStringBuilder(" and goodbye");
            var value = new VersionedStringSource(source);
            builder.Insert(5, value);

            TheResultingValue(builder.Version).ShouldBe(1);
            TheResultingString(builder.ToString()).ShouldBe("Hello and goodbye, world!");
        }