/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

<!-- Test repeated execution -->
doStartTag() called here
doAfterBody() called here
Blah
doAfterBody() called here
Blah
doAfterBody() called here
Blah
doEndTag() called here
doFinally() called here

<!-- Test 0-time execution -->
doStartTag() called here
doEndTag() called here
doFinally() called here

<!-- Test abrupt execution -->
doStartTag() called here
doCatch() called here with class freemarker.template.TemplateModelException: Error while invoking the "testtag" JSP custom tag; see cause exception
doFinally() called here

<!-- Test nested execution -->
doStartTag() called here
doAfterBody() called here
Outer Blah
doStartTag() called here
doAfterBody() called here
Inner Blah
doAfterBody() called here
Inner Blah
doEndTag() called here
doFinally() called here
doAfterBody() called here
Outer Blah
doStartTag() called here
doAfterBody() called here
Inner Blah
doAfterBody() called here
Inner Blah
doEndTag() called here
doFinally() called here
doEndTag() called here
doFinally() called here

<!-- Test nested execution with intermittent non-JSP transform -->
doStartTag() called here
doAfterBody() called here
Outer Blah
doStartTag() called here
doAfterBody() called here
Inner Blah
doAfterBody() called here
Inner Blah
doEndTag() called here
doFinally() called heredoAfterBody() called here
Outer Blah
doStartTag() called here
doAfterBody() called here
Inner Blah
doAfterBody() called here
Inner Blah
doEndTag() called here
doFinally() called heredoEndTag() called here
doFinally() called here

enter TestSimpleTag simpletag1
invoking body i=0
foo
enter TestSimpleTag simpletag2
invoking body i=0
bar
invoking body i=1
bar
invoking body i=2
bar
exit TestSimpleTag simpletag2
invoking body i=1
foo
enter TestSimpleTag simpletag2
invoking body i=0
bar
invoking body i=1
bar
invoking body i=2
bar
exit TestSimpleTag simpletag2
exit TestSimpleTag simpletag1
