<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2004 The Apache Software Foundation

     Licensed 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. -->

<jira:testList xmlns:jira="http://jira/xmlbeans_177">
  <test>This is a greater than sign: &gt;</test>
  <test>This is a less than sign: &lt;</test>
  <test>This is a single quote: &apos;</test>
  <test>This is a double quote: &quot;</test>
  <test>W.L.Gore &amp; Associates</test>
  <test>Character data may not contain the three-character sequence ]]&gt; with the > unescaped.</test>
  <test>In particular, <![CDATA[character data in a CDATA section may not contain the three-character sequence ]]&gt;]]> with the &gt; unescaped.</test>
</jira:testList>
