"""Markdown 解析器测试."""

import pytest
from mcp_docx_thesis_server.markdown_parser import MarkdownParser, parse_markdown_thesis


class TestMarkdownParser:
    """测试 Markdown 解析器."""

    def test_parse_simple_thesis(self):
        """测试解析简单论文."""
        markdown = """# 人工智能在教育领域的应用研究

## 摘要

本文研究了人工智能技术在高等教育中的应用现状和发展趋势。

## Abstract

This paper studies the application of artificial intelligence in higher education.

## 关键词

人工智能，教育，应用研究

## Keywords

artificial intelligence, education, application

## 第一章 绪论

### 1.1 研究背景

随着人工智能技术的快速发展...

### 1.2 研究意义

本研究具有重要的理论意义和实践价值。

## 第二章 相关理论与技术

## 参考文献

[1] 张三. 人工智能导论[M]. 北京: 清华大学出版社, 2024.
[2] 李四. 教育技术研究[J]. 教育科学, 2023, 15(3): 45-52.
"""

        content = parse_markdown_thesis(markdown)

        # 验证元数据
        assert content.metadata.title == "人工智能在教育领域的应用研究"
        assert "人工智能技术在高等教育中的应用现状" in content.metadata.abstract_cn
        assert "artificial intelligence" in content.metadata.abstract_en.lower()
        assert len(content.metadata.keywords_cn) == 3
        assert "人工智能" in content.metadata.keywords_cn
        assert len(content.metadata.keywords_en) == 3

        # 验证章节
        assert len(content.sections) > 0

        # 验证参考文献
        assert len(content.references) == 2
        assert content.references[0].index == 1

    def test_parse_without_abstract(self):
        """测试解析没有摘要的论文."""
        markdown = """# 测试论文

## 第一章 绪论

这是第一章的内容。

## 第二章 正文

这是第二章的内容。
"""

        content = parse_markdown_thesis(markdown)

        assert content.metadata.title == "测试论文"
        assert content.metadata.abstract_cn == ""
        assert len(content.sections) >= 1

    def test_parse_references_various_formats(self):
        """测试解析不同格式的参考文献."""
        markdown = """# 测试论文

## 参考文献

[1] 作者1. 文献1[M]. 出版社, 2023.
[2] 作者2. 文献2[J]. 期刊, 2022, 10(2): 100-110.
3. 作者3. 文献3[D]. 大学, 2021.
"""

        content = parse_markdown_thesis(markdown)

        assert len(content.references) >= 2

    def test_empty_markdown(self):
        """测试空 Markdown."""
        content = parse_markdown_thesis("")

        assert content.metadata.title == ""
        # 空内容会创建一个默认的"正文"章节
        assert len(content.sections) >= 0


class TestMarkdownParserInternals:
    """测试 Markdown 解析器内部方法."""

    def test_extract_metadata(self):
        """测试元数据提取."""
        parser = MarkdownParser()

        text = """# 论文标题

## 摘要

摘要内容。

## Abstract

Abstract content.

## 关键词

关键词1, 关键词2

## Keywords

keyword1, keyword2
"""

        parser._extract_metadata(text)

        assert parser.metadata.title == "论文标题"
        assert parser.metadata.abstract_cn == "摘要内容。"
        assert parser.metadata.abstract_en == "Abstract content."
        assert len(parser.metadata.keywords_cn) == 2
        assert len(parser.metadata.keywords_en) == 2
