use of org.thymeleaf.spring5.context.webmvc.SpringWebMvcThymeleafRequestContext in project thymeleaf-tests by thymeleaf.
the class DecoupledSTSMTest method test.
private static void test(final String templateName, final String expectedResultLocation, final Map<String, Object> vars) throws Exception {
final Map<String, Object> requestAttributes = new LinkedHashMap<String, Object>();
final Map<String, Object[]> requestParameters = new LinkedHashMap<String, Object[]>();
final HttpServletRequest mockRequest = TestMockServletUtil.createHttpServletRequest("WebVariablesMap", null, requestAttributes, requestParameters, Locale.US);
final HttpServletResponse mockResponse = TestMockServletUtil.createHttpServletResponse();
final Map<String, Object> servletContextAttributes = new LinkedHashMap<String, Object>();
final ServletContext mockServletContext = TestMockServletUtil.createServletContext(servletContextAttributes);
final XmlWebApplicationContext appCtx = new XmlWebApplicationContext();
appCtx.setServletContext(mockServletContext);
appCtx.setConfigLocation("classpath:templateparser/decoupled/stsm/applicationContext.xml");
appCtx.refresh();
mockServletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, appCtx);
// can be null!
final ConversionService conversionService = getConversionService(appCtx);
mockRequest.setAttribute(DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE, appCtx);
final ServletWebRequest servletWebRequest = new ServletWebRequest(mockRequest, mockResponse);
RequestContextHolder.setRequestAttributes(servletWebRequest);
final RequestContext requestContext = new RequestContext(mockRequest, mockResponse, mockServletContext, vars);
vars.put(AbstractTemplateView.SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE, requestContext);
vars.put(SpringContextVariableNames.SPRING_REQUEST_CONTEXT, requestContext);
vars.put(SpringContextVariableNames.THYMELEAF_REQUEST_CONTEXT, new SpringWebMvcThymeleafRequestContext(requestContext, mockRequest));
final List<String> variableNames = new ArrayList<String>(vars.keySet());
for (final String variableName : variableNames) {
final Object bindingObject = vars.get(variableName);
if (isBindingCandidate(variableName, bindingObject)) {
final String bindingVariableName = BindingResult.MODEL_KEY_PREFIX + variableName;
if (!vars.containsKey(bindingVariableName)) {
final WebDataBinder dataBinder = new WebDataBinder(bindingObject, bindingVariableName);
dataBinder.setConversionService(conversionService);
vars.put(bindingVariableName, dataBinder.getBindingResult());
}
}
}
final WebContext ctx = new WebContext(mockRequest, mockResponse, mockServletContext, Locale.US);
for (final Map.Entry<String, Object> entry : vars.entrySet()) {
ctx.setVariable(entry.getKey(), entry.getValue());
}
final ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setTemplateMode("HTML");
templateResolver.setPrefix("templateparser/decoupled/stsm/templates/");
templateResolver.setSuffix(".html");
templateResolver.setUseDecoupledLogic(true);
final SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
templateEngine.setLinkBuilder(new StandardLinkBuilder() {
@Override
protected String computeContextPath(final IExpressionContext context, final String base, final Map<String, Object> parameters) {
return "";
}
});
appCtx.getAutowireCapableBeanFactory().initializeBean(templateEngine, "templateEngine");
final String result = templateEngine.process(templateName, ctx);
final String expected = ResourceUtils.read(ClassLoaderUtils.getClassLoader(DecoupledSTSMTest.class).getResourceAsStream(expectedResultLocation), "ISO-8859-1", true);
Assert.assertEquals(ResourceUtils.normalize(expected), ResourceUtils.normalize(result));
}
Aggregations