use super::process_fo_document;
#[test]
fn test_invalid_xml() {
let invalid_xml = r##"<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<!-- Missing closing tag -->
<fo:layout-master-set>
</fo:root>"##;
let result = process_fo_document(invalid_xml);
assert!(result.is_err(), "Should fail on invalid XML");
}
#[test]
fn test_missing_required_element() {
let invalid_fo = r##"<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:page-sequence master-reference="A4">
<fo:flow flow-name="xsl-region-body">
<fo:block>Test</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>"##;
let result = process_fo_document(invalid_fo);
if let Ok(bytes) = result {
assert!(bytes.starts_with(b"%PDF-"));
}
}
#[test]
fn test_unknown_property() {
let fo_content = r##"<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="A4" page-width="210mm" page-height="297mm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4">
<fo:flow flow-name="xsl-region-body">
<fo:block unknown-property="value">Test</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>"##;
let result = process_fo_document(fo_content);
assert!(
result.is_ok(),
"Should handle unknown properties gracefully"
);
}
#[test]
fn test_invalid_property_value() {
let fo_content = r##"<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="A4" page-width="210mm" page-height="297mm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4">
<fo:flow flow-name="xsl-region-body">
<fo:block color="not-a-color">Test</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>"##;
let result = process_fo_document(fo_content);
if let Ok(bytes) = result {
assert!(bytes.starts_with(b"%PDF-"));
}
}
#[test]
fn test_missing_namespace() {
let no_namespace = r##"<?xml version="1.0" encoding="UTF-8"?>
<root>
<layout-master-set>
<simple-page-master master-name="A4" page-width="210mm" page-height="297mm">
<region-body/>
</simple-page-master>
</layout-master-set>
<page-sequence master-reference="A4">
<flow flow-name="xsl-region-body">
<block>Test</block>
</flow>
</page-sequence>
</root>"##;
let result = process_fo_document(no_namespace);
let _ = result;
}
#[test]
fn test_empty_page_sequence() {
let empty_sequence = r##"<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="A4" page-width="210mm" page-height="297mm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4">
</fo:page-sequence>
</fo:root>"##;
let result = process_fo_document(empty_sequence);
let _ = result;
}
#[test]
fn test_malformed_table() {
let malformed_table = r##"<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="A4" page-width="210mm" page-height="297mm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4">
<fo:flow flow-name="xsl-region-body">
<fo:table>
<fo:table-column column-width="100%"/>
</fo:table>
</fo:flow>
</fo:page-sequence>
</fo:root>"##;
let result = process_fo_document(malformed_table);
let _ = result;
}
#[test]
fn test_very_large_values() {
let large_values = r##"<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="huge" page-width="100000mm" page-height="100000mm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="huge">
<fo:flow flow-name="xsl-region-body">
<fo:block>Test</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>"##;
let result = process_fo_document(large_values);
let _ = result;
}
#[test]
fn test_negative_dimensions() {
let negative = r##"<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="invalid" page-width="-100mm" page-height="297mm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="invalid">
<fo:flow flow-name="xsl-region-body">
<fo:block>Test</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>"##;
let result = process_fo_document(negative);
let _ = result;
}