<?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: region-body_column-count_span_4.xml 993357 2010-09-07 13:45:39Z jeremias $ -->
<testcase>
  <info>
    <p>
      This test checks multi-column documents. Check that spanned section that overflow
      the current page, don't span to the next page.
    </p>
  </info>
  <fo>
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
      <fo:layout-master-set>
          <fo:simple-page-master master-name="odd" page-height="200mm" page-width="150mm">
              <fo:region-body column-count="2"/>
          </fo:simple-page-master>
      </fo:layout-master-set>
      <fo:page-sequence master-reference="odd">
          <fo:flow flow-name="xsl-region-body">
        <fo:block-container id="overflow-block-ct" keep-together.within-page="always"
            height="200.1mm" span="all">
          <fo:block id="overflow-block">overflow-block</fo:block>
        </fo:block-container>
        <fo:block id="col1">col1</fo:block>
        <fo:block id="col2" break-before="column">col2</fo:block>
          </fo:flow>
      </fo:page-sequence>
  </fo:root>
  </fo>
  <checks>
    <eval expected="2" xpath="count(//pageViewport)"/>
  </checks>
</testcase>
