import sys
from pathlib import Path
from xml.etree import ElementTree as ET
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from flatten_epub_toc import flatten_nav, flatten_ncx, set_xhtml_direction
def test_flatten_nav_after_flatten_ncx_preserves_default_xhtml_namespace():
"""Contract: flatten_nav must re-register the default XHTML namespace so that element serialization
does not emit unwanted 'ns0:' namespace prefixes even if flatten_ncx was called previously.
"""
nav_xml = """
TOC
"""
ncx_xml = """
1 Chapter 1"""
# Call flatten_ncx first, which registers default NCX namespace
flatten_ncx(ncx_xml, "Title", "TOC")
# Calling flatten_nav afterwards should still output clean XHTML without ns0: prefix
result = flatten_nav(nav_xml, "Title", "TOC").decode("utf-8")
assert "TOC
"""
result = flatten_nav(nav_xml, "Title Page", "Contents").decode("utf-8")
assert 'id="toc-li-title-page" class="chapter-group"' not in result
assert 'id="toc-li-contents" class="chapter-group"' not in result
def test_flatten_ncx_after_flatten_nav_preserves_default_ncx_namespace():
"""Contract: flatten_ncx must output default NCX namespace without ns0: prefix even if flatten_nav ran first."""
nav_xml = """
TOC
"""
ncx_xml = """
1 Chapter 1"""
# Run nav first, then ncx
flatten_nav(nav_xml, "Title", "TOC")
result = flatten_ncx(ncx_xml, "Title", "TOC").decode("utf-8")
assert "TOC
"""
result = flatten_nav(nav_xml, "Title Page", "Contents").decode("utf-8")
title_pos = result.find('id="toc-li-title-page"')
contents_pos = result.find('id="toc-li-contents"')
ch1_pos = result.find('href="ch1.xhtml"')
assert title_pos != -1
assert contents_pos != -1
assert ch1_pos != -1
assert title_pos < contents_pos < ch1_pos
assert 'class="chapter-group"' in result[ch1_pos - 100 : ch1_pos + 100]
def test_rtl_helpers_use_requested_language_and_keep_code_ltr():
nav_xml = """
"""
content_xml = """