private void Test(String fileName, String elementPath, params String[] expectedStyles) { String filePath = sourceFolder + fileName; IXmlParser parser = new JsoupHtmlParser(); IDocumentNode document = parser.Parse(new FileStream(filePath, FileMode.Open, FileAccess.Read), "UTF-8"); ICssResolver cssResolver = new DefaultCssResolver(document, MediaDeviceDescription.CreateDefault(), new ResourceResolver ("")); CssContext context = new CssContext(); ResolveStylesForTree(document, cssResolver, context); IElementNode element = FindElement(document, elementPath); if (element == null) { NUnit.Framework.Assert.Fail(MessageFormatUtil.Format("Element at path \"{0}\" was not found.", elementPath )); } IDictionary <String, String> elementStyles = element.GetStyles(); ICollection <String> expectedStylesSet = new HashSet <String>(JavaUtil.ArraysAsList(expectedStyles)); ICollection <String> actualStylesSet = StylesMapToHashSet(elementStyles); NUnit.Framework.Assert.IsTrue(SetsAreEqual(expectedStylesSet, actualStylesSet), GetDifferencesMessage(expectedStylesSet , actualStylesSet)); }
private IElement ProcessMarginBoxContent(PageMarginBoxContextNode marginBoxContentNode, int pageNumber, ProcessorContext context) { IElementNode dummyMarginBoxNode = new PageMarginBoxDummyElement(); dummyMarginBoxNode.SetStyles(marginBoxContentNode.GetStyles()); DefaultCssResolver cssResolver = new DefaultCssResolver(marginBoxContentNode, context); ITagWorker marginBoxWorker = context.GetTagWorkerFactory().GetTagWorker(dummyMarginBoxNode, context); for (int i = 0; i < marginBoxContentNode.ChildNodes().Count; i++) { INode childNode = marginBoxContentNode.ChildNodes()[i]; if (childNode is ITextNode) { String text = ((ITextNode)marginBoxContentNode.ChildNodes()[i]).WholeText(); marginBoxWorker.ProcessContent(text, context); } else { if (childNode is IElementNode) { ITagWorker childTagWorker = context.GetTagWorkerFactory().GetTagWorker((IElementNode)childNode, context); if (childTagWorker != null) { IDictionary <String, String> stringStringMap = cssResolver.ResolveStyles(childNode, context.GetCssContext() ); ((IElementNode)childNode).SetStyles(stringStringMap); ICssApplier cssApplier = context.GetCssApplierFactory().GetCssApplier((IElementNode)childNode); if (cssApplier != null) { cssApplier.Apply(context, (IStylesContainer)childNode, childTagWorker); } childTagWorker.ProcessEnd((IElementNode)childNode, context); marginBoxWorker.ProcessTagChild(childTagWorker, context); } } else { if (childNode is PageMarginRunningElementNode) { PageMarginRunningElementNode runningElementNode = (PageMarginRunningElementNode)childNode; RunningElementContainer runningElement = context.GetCssContext().GetRunningManager().GetRunningElement(runningElementNode .GetRunningElementName(), runningElementNode.GetRunningElementOccurrence(), pageNumber); if (runningElement != null) { marginBoxWorker.ProcessTagChild(runningElement.GetProcessedElementWorker(), context); } } else { LogManager.GetLogger(this.GetType()).Error(iText.Html2pdf.LogMessageConstant.UNKNOWN_MARGIN_BOX_CHILD); } } } } marginBoxWorker.ProcessEnd(dummyMarginBoxNode, context); if (!(marginBoxWorker.GetElementResult() is IElement)) { throw new InvalidOperationException("Custom tag worker implementation for margin boxes shall return IElement for #getElementResult() call." ); } ICssApplier cssApplier_1 = context.GetCssApplierFactory().GetCssApplier(dummyMarginBoxNode); cssApplier_1.Apply(context, marginBoxContentNode, marginBoxWorker); return((IElement)marginBoxWorker.GetElementResult()); }