public void TestFixtureSetUp()
        {
            // reason to do this at fixture setup time is to avoid the 1st XSLT test to pay the initialization cost of
            // these data structures, should one want to keep an eye on the timing reported by R# test runner

            _xslPart1 = MessageFactory.CreateEnvelope <Envelope>().OuterXml;
            _xslPart2 = MessageFactory.CreateMessage <Batch.Content>(ResourceManager.LoadString("Data.BatchContent.xml")).OuterXml;

            _xslTransformDescriptor = new XslCompiledTransformDescriptor(new XslCompiledTransformDescriptorBuilder(typeof(BatchContentToAnyEnvelope)));

            _xslNamespaceManager = new XmlNamespaceManager(new NameTable());
            _xslNamespaceManager.AddNamespace("env", new SchemaMetadata(typeof(Envelope)).TargetNamespace);
            _xslNamespaceManager.AddNamespace("tns", new SchemaMetadata(typeof(Batch.Release)).TargetNamespace);
        }
 public void SupportsXslTransformOfAggregatedXmlReaders()
 {
     using (var part1 = new StringStream(PART_1))
         using (var part2 = new StringStream(PART_2))
             using (var part3 = new StringStream(PART_3))
                 using (var composite = CompositeXmlReader.Create(new[] { XmlReader.Create(part1), XmlReader.Create(part2), XmlReader.Create(part3) }))
                 {
                     var xslTransformDescriptor = new XslCompiledTransformDescriptor(new XslCompiledTransformDescriptorBuilder(typeof(IdentityTransform)));
                     var builder = new StringBuilder();
                     using (var writer = XmlWriter.Create(builder))
                     {
                         xslTransformDescriptor.XslCompiledTransform.Transform(composite, xslTransformDescriptor.Arguments, writer !);
                     }
                     builder.GetReaderAtContent().ReadOuterXml().Should().Be(EXPECTED);
                 }
 }
        internal XsltArgumentList BuildArgumentList(XslCompiledTransformDescriptor descriptor, XsltArgumentList arguments)
        {
            // Ensures a fresh copy of descriptor.Arguments is returned should it be augmented with either the current
            // message context or specific arguments passed along the way. It is *detrimental* for the IBaseMessageContext
            // not to be shared across different transform executions! Notice that because XsltArgumentList.Union() yields
            // a new XsltArgumentList instance, it is not necessary to .Clone() descriptor.Arguments beforehand.
            if ((descriptor.ExtensionRequirements & ExtensionRequirements.MessageContext) == ExtensionRequirements.MessageContext)
            {
                arguments = descriptor.Arguments.Union(arguments);
                arguments.AddExtensionObject(
                    BaseMessageContextFunctions.TARGET_NAMESPACE,
                    new BaseMessageContextFunctions(_context, descriptor.NamespaceResolver));
                return(arguments);
            }

            // If no specific arguments has been passed along then it is assumed that descriptor.Arguments references only
            // stateless extension objects and can consequently be shared across different transform executions. Again,
            // notice XsltArgumentList.Union() yields a new XsltArgumentList instance.
            return(arguments != null?descriptor.Arguments.Union(arguments) : descriptor.Arguments);
        }