Ejemplo n.º 1
0
  @Test
  public void testTemplateLocatorReaderIsAlwaysClosed() {

    final String template = "FOO";
    final String illegalTemplate = "{{foo";
    final AtomicBoolean isCloseInvoked = new AtomicBoolean(false);

    TemplateLocator locator =
        new AbstractTemplateLocator(1) {
          @SuppressWarnings("resource")
          @Override
          public Reader locate(String templateId) {
            return "foo".equals(templateId)
                ? new MyStringReader(template, isCloseInvoked)
                : new MyStringReader(illegalTemplate, isCloseInvoked);
          }

          @Override
          public Set<String> getAllIdentifiers() {
            return null;
          }
        };

    final MustacheEngine engine =
        MustacheEngineBuilder.newBuilder().addTemplateLocator(locator).build();

    assertEquals(template, engine.getMustacheSource("foo"));
    assertTrue(isCloseInvoked.get());

    engine.invalidateTemplateCache();
    isCloseInvoked.set(false);
    assertFalse(isCloseInvoked.get());

    assertEquals(template, engine.getMustache("foo").render(null));
    assertTrue(isCloseInvoked.get());

    isCloseInvoked.set(false);
    assertFalse(isCloseInvoked.get());

    ExceptionAssert.expect(MustacheException.class)
        .check(
            new Runnable() {
              public void run() {
                engine.getMustache("whatever").render(null);
              }
            });
    assertTrue(isCloseInvoked.get());
  }