protected BaseReport()
        {
            Workbook = new XLWorkbook();
            var typeProvider     = new DefaultTypeProvider(new[] { Assembly.GetExecutingAssembly(), Assembly.GetAssembly(typeof(DateTime)), }, GetType());
            var instanceProvider = new DefaultInstanceProvider(this);

            TemplateProcessor = new DefaultTemplateProcessor(new DefaultPropertyValueProvider(typeProvider, instanceProvider), new SystemVariableProvider(),
                                                             new DefaultMethodCallValueProvider(typeProvider, instanceProvider), new DefaultDataItemValueProvider(new DataItemValueProviderFactory())
            {
                DataItemSelfTemplate = "di"
            });
        }
示例#2
0
        public void TestGetValue()
        {
            var propertyValueProvider   = Substitute.For <IPropertyValueProvider>();
            var variableValueProvider   = Substitute.For <SystemVariableProvider>();
            var methodCallValueProvider = Substitute.For <IMethodCallValueProvider>();
            var dataItemValueProvider   = Substitute.For <IGenericDataItemValueProvider <HierarchicalDataItem> >();
            var dataItem = new HierarchicalDataItem();

            ExceptionAssert.Throws <ArgumentNullException>(() => new DefaultTemplateProcessor(null, variableValueProvider, methodCallValueProvider, dataItemValueProvider));
            ExceptionAssert.Throws <ArgumentNullException>(() => new DefaultTemplateProcessor(propertyValueProvider, null, methodCallValueProvider, dataItemValueProvider));
            new DefaultTemplateProcessor(propertyValueProvider, variableValueProvider, null, dataItemValueProvider);
            new DefaultTemplateProcessor(propertyValueProvider, variableValueProvider, methodCallValueProvider);

            var templateProcessor = new DefaultTemplateProcessor(propertyValueProvider, variableValueProvider, methodCallValueProvider, dataItemValueProvider);

            ExceptionAssert.Throws <ArgumentException>(() => templateProcessor.GetValue(null, dataItem));
            ExceptionAssert.Throws <InvalidTemplateException>(() => templateProcessor.GetValue("{p-Name}"), "Invalid template \"{p-Name}\". Cannot find separator \":\" between member label and member template");
            ExceptionAssert.Throws <InvalidTemplateException>(() => templateProcessor.GetValue("{bad:Name}"), "Invalid template \"{bad:Name}\". Unknown member label \"bad\"");

            templateProcessor.GetValue("{p:Name}");

            propertyValueProvider.Received(1).GetValue("Name");
            variableValueProvider.DidNotReceiveWithAnyArgs().GetVariable(Arg.Any <string>());
            methodCallValueProvider.DidNotReceiveWithAnyArgs().CallMethod(null, null, null);
            dataItemValueProvider.DidNotReceiveWithAnyArgs().GetValue(Arg.Any <string>(), null);

            propertyValueProvider.ClearReceivedCalls();
            templateProcessor.GetValue(" { p : Name } ");

            propertyValueProvider.Received(1).GetValue("Name");
            variableValueProvider.DidNotReceiveWithAnyArgs().GetVariable(Arg.Any <string>());
            methodCallValueProvider.DidNotReceiveWithAnyArgs().CallMethod(null, null, null);
            dataItemValueProvider.DidNotReceiveWithAnyArgs().GetValue(Arg.Any <string>(), null);

            propertyValueProvider.ClearReceivedCalls();
            templateProcessor.GetValue(" p:Name ");

            propertyValueProvider.Received(1).GetValue("Name");
            variableValueProvider.DidNotReceiveWithAnyArgs().GetVariable(Arg.Any <string>());
            methodCallValueProvider.DidNotReceiveWithAnyArgs().CallMethod(null, null, null);
            dataItemValueProvider.DidNotReceiveWithAnyArgs().GetValue(Arg.Any <string>(), null);

            propertyValueProvider.ClearReceivedCalls();
            templateProcessor.GetValue("sv:Now");

            variableValueProvider.Received(1).GetVariable("Now");
            propertyValueProvider.DidNotReceiveWithAnyArgs().GetValue(Arg.Any <string>());
            methodCallValueProvider.DidNotReceiveWithAnyArgs().CallMethod(null, null, null);
            dataItemValueProvider.DidNotReceiveWithAnyArgs().GetValue(Arg.Any <string>(), null);

            variableValueProvider.ClearReceivedCalls();
            templateProcessor.GetValue("sf:Format(5567.88, 0)");

            variableValueProvider.DidNotReceiveWithAnyArgs().GetVariable(Arg.Any <string>());
            propertyValueProvider.DidNotReceiveWithAnyArgs().GetValue(Arg.Any <string>());
            methodCallValueProvider.Received(1).CallMethod("Format(5567.88, 0)", typeof(SystemFunctions), templateProcessor, null);
            dataItemValueProvider.DidNotReceiveWithAnyArgs().GetValue(Arg.Any <string>(), null);

            methodCallValueProvider.ClearReceivedCalls();
            templateProcessor.GetValue("{ m:Method() }", dataItem);

            propertyValueProvider.DidNotReceiveWithAnyArgs().GetValue(Arg.Any <string>());
            variableValueProvider.DidNotReceiveWithAnyArgs().GetVariable(Arg.Any <string>());
            methodCallValueProvider.Received(1).CallMethod("Method()", templateProcessor, dataItem);
            dataItemValueProvider.DidNotReceiveWithAnyArgs().GetValue(Arg.Any <string>(), null);

            methodCallValueProvider.ClearReceivedCalls();
            templateProcessor.GetValue("{m:Method()}", dataItem);
            propertyValueProvider.DidNotReceiveWithAnyArgs().GetValue(Arg.Any <string>());
            variableValueProvider.DidNotReceiveWithAnyArgs().GetVariable(Arg.Any <string>());
            methodCallValueProvider.Received(1).CallMethod("Method()", templateProcessor, dataItem);
            dataItemValueProvider.DidNotReceiveWithAnyArgs().GetValue(Arg.Any <string>(), null);

            methodCallValueProvider.ClearReceivedCalls();
            ExceptionAssert.Throws <InvalidOperationException>(() => new DefaultTemplateProcessor(propertyValueProvider, variableValueProvider).GetValue("{m:Method()}"), "Template \"{m:Method()}\" contains method call but methodCallValueProvider is null");
            ExceptionAssert.Throws <InvalidOperationException>(() => new DefaultTemplateProcessor(propertyValueProvider, variableValueProvider).GetValue("{sf:Format(p:Prop, 0))}"), "Template \"{sf:Format(p:Prop, 0))}\" contains system function call but methodCallValueProvider is null");
            ExceptionAssert.Throws <InvalidOperationException>(() => new DefaultTemplateProcessor(propertyValueProvider, variableValueProvider)
            {
                SystemFunctionsType = null
            }.GetValue("{sf:Format(p:Prop, 0))}"), "Template \"{sf:Format(p:Prop, 0))}\" contains system function call but property SystemFunctionsType is null");

            templateProcessor.GetValue("{di:Field}", dataItem);
            propertyValueProvider.DidNotReceiveWithAnyArgs().GetValue(Arg.Any <string>());
            variableValueProvider.DidNotReceiveWithAnyArgs().GetVariable(Arg.Any <string>());
            methodCallValueProvider.DidNotReceiveWithAnyArgs().CallMethod(null, null, null);
            dataItemValueProvider.Received(1).GetValue("Field", dataItem);

            dataItemValueProvider.ClearReceivedCalls();
            ExceptionAssert.Throws <InvalidOperationException>(() => templateProcessor.GetValue("{di:Field}"), "Template \"{di:Field}\" contains data reference but dataItem is null");
            ExceptionAssert.Throws <InvalidOperationException>(() => new DefaultTemplateProcessor(propertyValueProvider, variableValueProvider).GetValue("{di:Field}", dataItem), "Template \"{di:Field}\" contains data reference but dataItemValueProvider is null");
        }