aboutsummaryrefslogtreecommitdiffstats
path: root/tools/snippets_translate/tests/test_snippets.py
blob: 84897d81573690051e0b6ea3702dd918f0dd36e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only

from main import _get_snippets, get_snippet_ids, CPP_SNIPPET_PATTERN


C_COMMENT = "//"


def test_stacking():
    lines = [
        "//! [A] //! [B] ",
        "//! [C] //! [D] //! [E]",
        "// Content",
        "//! [C] //! [A] ",
        "//! [B] //! [D] //! [E]",
    ]
    snippets = _get_snippets(lines, C_COMMENT, CPP_SNIPPET_PATTERN)
    assert len(snippets) == 5

    snippet_a = snippets["A"]
    assert len(snippet_a) == 4  # A starts at line 0 and ends at line 3

    snippet_b = snippets["B"]
    assert len(snippet_b) == 5  # B starts at line 0 and ends at line 4

    snippet_c = snippets["C"]
    assert len(snippet_c) == 3  # C starts at line 1 and ends at line 3

    snippet_d = snippets["D"]
    assert len(snippet_d) == 4  # D starts at line 1 and ends at line 4

    snippet_e = snippets["E"]
    assert len(snippet_e) == 4  # E starts at line 1 and ends at line 4


def test_nesting():
    lines = [
        "//! [A]",
        "//! [B]",
        "//! [C]",
        "// Content",
        "//! [A]",
        "//! [C]",
        "//! [B]",
    ]
    snippets = _get_snippets(lines, C_COMMENT, CPP_SNIPPET_PATTERN)
    assert len(snippets) == 3

    snippet_a = snippets["A"]
    assert len(snippet_a) == 5
    assert snippet_a == lines[:5]

    snippet_b = snippets["B"]
    assert len(snippet_b) == 6
    assert snippet_b == lines[1:]

    snippet_c = snippets["C"]
    assert len(snippet_c) == 4
    assert snippet_c == lines[2:6]


def test_overlapping():
    a_id = "//! [A]"
    b_id = "//! [B]"
    lines = [
        "pretext",
        a_id,
        "l1",
        "//! [C]",
        "//! [A] //! [B]",
        "l2",
        "l3 // Comment",
        b_id,
        "posttext",
        "//! [C]",
    ]
    snippets = _get_snippets(lines, C_COMMENT, CPP_SNIPPET_PATTERN)
    assert len(snippets) == 3

    # Simple snippet ID lines are generated
    snippet_a = snippets["A"]
    assert len(snippet_a) == 4
    assert snippet_a == lines[1:4] + [a_id]

    snippet_c = snippets["C"]
    assert len(snippet_c) == 7
    assert snippet_c == lines[3:]

    snippet_b = snippets["B"]
    assert len(snippet_b) == 4
    assert snippet_b == [b_id] + lines[5:8]


def test_snippets():
    a_id = "//! [A]"
    b_id = "//! [B]"

    lines = [
        "pretext",
        a_id,
        "l1",
        "//! [A] //! [B]",
        "l2",
        "l3 // Comment",
        b_id,
        "posttext"
    ]

    snippets = _get_snippets(lines, C_COMMENT, CPP_SNIPPET_PATTERN)
    assert len(snippets) == 2

    snippet_a = snippets["A"]

    assert len(snippet_a) == 3
    assert snippet_a == lines[1:3] + [a_id]

    snippet_b = snippets["B"]
    assert len(snippet_b) == 4
    assert snippet_b == [b_id] + lines[4:7]


def test_snippet_ids():
    assert get_snippet_ids("", CPP_SNIPPET_PATTERN) == []
    assert get_snippet_ids("//! ",
                           CPP_SNIPPET_PATTERN) == []  # Invalid id
    assert get_snippet_ids("//! [some name]",
                           CPP_SNIPPET_PATTERN) == ["some name"]
    assert get_snippet_ids("//! [some name] [some other name]",
                           CPP_SNIPPET_PATTERN) == ["some name"]
    assert get_snippet_ids("//! [some name] //! ",
                           CPP_SNIPPET_PATTERN) == ["some name"]  # Invalid id
    assert get_snippet_ids("//! [some name] //! [some other name]",
                           CPP_SNIPPET_PATTERN) == ["some name", "some other name"]