<#--
  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.
-->
<html>
<head>
<title>FreeMarker: Switch-Case Test</title>
</head>
<body>

<p>Here we iterate over a list of animals.</p>
<#assign animalList = [ "aardvark", "kiwi", "gecko", "cat", "dog", "elephant",
    "squirrel", "zebra" ]>
<#assign favoriteAnimal = "kiwi">

<#foreach animal in animalList>
<p>Animal is: ${animal}.<br />
<#switch animal>
    <#case "zebra">
        This is the HTML for a large stripey animal.
    <#case "elephant">
    <#case "rhinocerous">
        This is the HTML for large animals.
        <#break>
    <#case "squirrel">
    <#case "gecko">
        This is the HTML for small animals.
        <#break>
    <#case favoriteAnimal>
        This is the HTML for the user's favorite animal.
        <#break>
    <#default>
        This is the HTML for other animals.
        <#break>
</#switch>
</p>
</#foreach>

<#-- Nesting and no-match -->
<#list [ 1, 2, 3 ] as x>
  <#switch x>
    <#case 1>
      1
      <#switch x*2>
        <#case 1>
          i1
          <#break>
        <#case 2>
          i2
          <#break>
        <#case 3>
          i3
          <#break>
        <#case 4>
          i4
          <#break>
        <#case 6>
          i6
          <#break>
      </#switch>
      <#break>     
    <#case 2>
      2
      <#switch x*2>
        <#case 1>
          i1
          <#break>
        <#case 2>
          i2
          <#break>
        <#case 3>
          i3
          <#break>
        <#case 4>
          i4
          <#-- falls through -->
        <#case 5>
          ft
          <#-- falls through -->
      </#switch>
      ft
      <#-- falls through -->     
    <#case 3>
      3
      <#switch x*2>
        <#--  Comment is allowed here since 2.3.27 -->
        <#case 1>
          i1
          <#break>
        <#case 2>
          i2
          <#break>
        <#case 3>
          i3
          <#break>
        <#case 4>
          i4
          <#break>
        <#case 6>
          i6
          <#break>
      </#switch>
      <#break>     
  </#switch>
</#list>

<#-- No match -->
[<#switch 213>
  <#case 1>sadas
</#switch>]

[<#switch 213></#switch>]

<#-- Fall-through -->
<#list [ 0, 1, 2, 3, 4 ] as x>
  "<#switch x><#case 1>1<#case 2>2<#case 3>3<#case 4>4</#switch>"
</#list>

<#-- Legacy parser bug: #default might not be the last, but it doesn't fall through if called directly -->
<#list [1, 2, 3, 4, 5] as x>
  "<#switch x><#case 1>1<#case 2>2<#default>default<#case 4>4<#case 5>5</#switch>"
</#list>

<#-- two #default-s are parsing error -->
<@assertFails message="can only have one default"><@"<#switch 1><#case 1><#default><#default></#switch>"?interpret /></@>

</body>
</html>
