public void NullArrayExtractionTestWithBraces()
        {
            const string valueDesription = "Value::Bs[]";
            var          child           = ObjectPropertiesExtractor.ExtractChildObject(new A(), ExcelTemplatePath.FromRawExpression(valueDesription));

            child.Should().BeNull();
        }
        public void AllNullValuesArrayExtractionTest()
        {
            const string valueDesription = "Value::Bs[]";
            var          localModel      = new A
            {
                Bs = new B[] { null, null, null }
            };
            var child      = ObjectPropertiesExtractor.ExtractChildObject(localModel, ExcelTemplatePath.FromRawExpression(valueDesription));
            var childArray = child as object[];

            childArray.Should().BeEquivalentTo(localModel.Bs);
        }
        public void ComplexObjectsArrayExtractionTest()
        {
            const string valueDesription = "Value::Bs[].Cs[]";
            var          child           = ObjectPropertiesExtractor.ExtractChildObject(model, ExcelTemplatePath.FromRawExpression(valueDesription));
            var          childArray      = child as object[];

            childArray.Should().NotBeNull();

            childArray.Length.Should().Be(2);
            childArray[0].Should().BeEquivalentTo(model.Bs[0].Cs);
            childArray[1].Should().BeEquivalentTo(model.Bs[1].Cs);
        }
        private static object ExtractChildIfCorrectDescription(string expression, object model)
        {
            var excelTemplatePath = ExcelTemplatePath.FromRawExpression(expression);

            try
            {
                return(ObjectPropertiesExtractor.ExtractChildObject(model, excelTemplatePath));
            }
            catch (ObjectPropertyExtractionException exception)
            {
                throw new InvalidOperationException($"Failed to extract child by path '{excelTemplatePath.RawPath}' in model of type {model.GetType()}", exception);
            }
        }