public async Task ShouldUseBaseValueWhenConflict()
        {
            //Arrange
            var doc             = ConfigDocument.Load(SrcConfig);
            var includeProvider = new TestIncludeProvider(IncludeSimple);

            //Act
            await doc.ApplyIncludes(includeProvider);

            var res = TestModel.Create(doc);

            //Assert
            Assert.Equal("from-base-val", res.IncludeConflict);
        }
        public async Task ShouldResolveIncludes()
        {
            //Arrange
            var doc             = ConfigDocument.Load(SrcConfig);
            var includeProvider = new TestIncludeProvider(IncludeSimple);

            //Act
            await doc.ApplyIncludes(includeProvider);

            var res = TestModel.Create(doc);

            //Assert
            Assert.Equal("from-include-val", res.Included);
        }
        public void ShouldOverrideSubElements()
        {
            //Arrange
            var originDoc   = ConfigDocument.Load(SrcConfig);
            var overrideDoc = ConfigDocument.Load(OverrideConfig);
            var overrides   = overrideDoc.CreateOverrides();

            //Act
            originDoc.ApplyOverrides(overrides);

            var res = TestModel.Create(originDoc);

            //Assert
            Assert.Equal("NewBarVal", res.InnerObject.Bar);
        }
        public void ShouldOverride()
        {
            //Arrange
            var originDoc   = ConfigDocument.Load(SrcConfig);
            var overrideDoc = ConfigDocument.Load(OverrideConfig);
            var overrides   = overrideDoc.CreateOverrides();

            //Act
            originDoc.ApplyOverrides(overrides);

            var res = TestModel.Create(originDoc);

            //Assert
            Assert.Equal("NewVal", res.ParamForOverride);
        }
        public async Task ShouldIncludeOneItemArray()
        {
            //Arrange
            const string includeArray =
                "{" +
                "\"IncludedArray\":[\"foo\"]," +
                "\"IncludeConflict\":\"from-include-val\"" +
                "}";
            var doc             = ConfigDocument.Load(SrcConfig);
            var includeProvider = new TestIncludeProvider(includeArray);

            //Act
            await doc.ApplyIncludes(includeProvider);

            var res = TestModel.Create(doc);

            //Assert
            Assert.NotNull(res.IncludedArray);
            Assert.Single(res.IncludedArray);
            Assert.Equal("foo", res.IncludedArray[0]);
        }