Skip to content

Commit c73fa3c

Browse files
committed
XRENDERING-689: Default macro content parser doesn't preserve restricted contexts
* Pass the restricted attribute to the nested transformation context.
1 parent 016af11 commit c73fa3c

2 files changed

Lines changed: 25 additions & 2 deletions

File tree

xwiki-rendering-transformations/xwiki-rendering-transformation-macro/src/main/java/org/xwiki/rendering/internal/macro/DefaultMacroContentParser.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,9 @@ private XDOM createXDOM(String content, MacroTransformationContext macroContext,
129129

130130
// Execute the content
131131
if (transform && macroContext.getTransformation() != null) {
132-
TransformationContext txContext = new TransformationContext(result, syntax);
132+
TransformationContext wrappingContext = macroContext.getTransformationContext();
133+
boolean isRestricted = wrappingContext != null && wrappingContext.isRestricted();
134+
TransformationContext txContext = new TransformationContext(result, syntax, isRestricted);
133135
txContext.setId(macroContext.getId());
134136
performTransformation((MutableRenderingContext) this.renderingContext, macroContext.getTransformation(),
135137
txContext, result);

xwiki-rendering-transformations/xwiki-rendering-transformation-macro/src/test/java/org/xwiki/rendering/internal/macro/DefaultMacroContentParserTest.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,15 @@
3939
import org.xwiki.rendering.transformation.MacroTransformationContext;
4040
import org.xwiki.rendering.transformation.RenderingContext;
4141
import org.xwiki.rendering.transformation.Transformation;
42+
import org.xwiki.rendering.transformation.TransformationContext;
4243
import org.xwiki.test.annotation.ComponentList;
4344
import org.xwiki.test.junit5.mockito.ComponentTest;
4445
import org.xwiki.test.junit5.mockito.InjectMockComponents;
4546
import org.xwiki.test.junit5.mockito.MockComponent;
4647

4748
import static org.junit.jupiter.api.Assertions.assertEquals;
4849
import static org.mockito.ArgumentMatchers.any;
50+
import static org.mockito.ArgumentMatchers.argThat;
4951
import static org.mockito.ArgumentMatchers.eq;
5052
import static org.mockito.Mockito.mock;
5153
import static org.mockito.Mockito.verify;
@@ -108,7 +110,26 @@ void parseInlineWithStandaloneMacroWithTransformations() throws Exception
108110

109111
this.macroContentParser.parse("content", this.macroContext, true, true);
110112

111-
verify((MutableRenderingContext) this.renderingContext).transformInContext(any(), any(),
113+
verify((MutableRenderingContext) this.renderingContext).transformInContext(any(),
114+
argThat(context -> !context.isRestricted()),
112115
eq(new XDOM(Arrays.<Block>asList(new MacroBlock("macro", Collections.emptyMap(), null, true)))));
113116
}
117+
118+
@Test
119+
void parseInlineWithStandaloneMacroWithRestrictedTransformations() throws Exception
120+
{
121+
when(this.mockParser.parse(any(Reader.class)))
122+
.thenReturn(
123+
new XDOM(Collections.singletonList(new MacroBlock("macro", Collections.emptyMap(), null, false))));
124+
125+
this.macroContext.setTransformation(mock(Transformation.class));
126+
this.macroContext.getTransformationContext().setRestricted(true);
127+
128+
this.macroContentParser.parse("content", this.macroContext, true, true);
129+
130+
verify((MutableRenderingContext) this.renderingContext).transformInContext(
131+
any(), argThat(TransformationContext::isRestricted),
132+
eq(new XDOM(Collections.singletonList(new MacroBlock("macro", Collections.emptyMap(), null, true))))
133+
);
134+
}
114135
}

0 commit comments

Comments
 (0)