<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->
<!-- $Id$ -->
<testcase>
  <info>
    <p>
      This test checks registration of the "id" of fo:footnote and fo:footnote-body, 
      so that they can be referenced in other places in the document.
    </p>
  </info>
  <fo>
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
      <fo:layout-master-set>
        <fo:simple-page-master master-name="normal" page-width="5in" page-height="3in">
          <fo:region-body/>
        </fo:simple-page-master>
      </fo:layout-master-set>
      <fo:page-sequence master-reference="normal" white-space-collapse="true">
        <fo:flow flow-name="xsl-region-body">
          <fo:block text-align="center">
            Blah
            <fo:footnote id="fn1">
              <fo:inline font-size="6.95pt" vertical-align="super">1) </fo:inline>
                <fo:footnote-body id="fnb1">
                  <fo:block text-align="left">
                    <fo:inline font-size="6.95pt" vertical-align="super">1) </fo:inline>http://xmlgrapics.apache.org/fop/</fo:block>
                </fo:footnote-body>
            </fo:footnote>
          </fo:block>
          <fo:block text-align="center" break-before="page">
            <fo:basic-link internal-destination="fn1">This should link to previous page</fo:basic-link>
          </fo:block>
          <fo:block text-align="center">
            <fo:basic-link internal-destination="fn1">This should link to previous page</fo:basic-link>
          </fo:block>
        </fo:flow>
      </fo:page-sequence>
    </fo:root>
  </fo>
  <checks>
    <!-- Check fo:footnote @id -->
    <!-- First two checks based on the assumption that fix is to add an empty inline
         area to hold the @prod-id -->
    <true xpath="((//page)[1]//block)[1]/lineArea[1]/inline[1]/@prod-id" />
    <eval expected="fn1" xpath="((//page)[1]//block)[1]/lineArea[1]/inline[1]/@prod-id"/>
    <true xpath="((//page)[2]//block)[1]/lineArea[1]/inlineparent[1]/@internal-link" />
    <eval expected="(P1,fn1)" xpath="((//page)[2]//block)[1]/lineArea[1]/inlineparent[1]/@internal-link"/>
    <!-- Check fo:footnote-body @id -->
    <!-- TODO - figure out where @prod-id should go -->
    <true xpath="((//page)[2]//block)[2]/lineArea[1]/inlineparent[1]/@internal-link" />
    <eval expected="(P1,fnb1)" xpath="((//page)[2]//block)[1]/lineArea[1]/inlineparent[2]/@internal-link"/>
  </checks>
</testcase>
