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
// Shared Strings unit tests.
//
// SPDX-License-Identifier: MIT OR Apache-2.0
//
// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org

#[cfg(test)]
mod shared_strings_tests {

    use crate::shared_strings::SharedStrings;
    use crate::shared_strings_table::SharedStringsTable;
    use crate::test_functions::xml_to_vec;
    use pretty_assertions::assert_eq;

    #[test]
    fn test_shared_string_table() {
        let mut string_table = SharedStringsTable::new();

        let mut shared_strings = SharedStrings::new();

        string_table.shared_string_index("neptune".into());
        string_table.shared_string_index("neptune".into());
        string_table.shared_string_index("neptune".into());
        string_table.shared_string_index("neptune".into());
        string_table.shared_string_index("mars".into());
        string_table.shared_string_index("venus".into());
        string_table.shared_string_index("mars".into());

        shared_strings.assemble_xml_file(&string_table);

        let got = shared_strings.writer.read_to_str();
        let got = xml_to_vec(got);

        let expected = xml_to_vec(
            r#"
                <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
                <sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="7" uniqueCount="3">
                  <si>
                    <t>neptune</t>
                  </si>
                  <si>
                    <t>mars</t>
                  </si>
                  <si>
                    <t>venus</t>
                  </si>
                </sst>
                "#,
        );

        assert_eq!(expected, got);
    }

    #[test]
    fn test_shared_string_table_with_preserve() {
        let mut string_table = SharedStringsTable::new();

        let mut shared_strings = SharedStrings::new();

        string_table.shared_string_index("abcdefg".into());
        string_table.shared_string_index("   abcdefg".into());
        string_table.shared_string_index("abcdefg   ".into());

        shared_strings.assemble_xml_file(&string_table);

        let got = shared_strings.writer.read_to_str();
        let got = xml_to_vec(got);

        let expected = xml_to_vec(
            r#"
                <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
                <sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="3" uniqueCount="3">
                <si>
                    <t>abcdefg</t>
                </si>
                <si>
                    <t xml:space="preserve">   abcdefg</t>
                </si>
                <si>
                    <t xml:space="preserve">abcdefg   </t>
                </si>
            </sst>
                "#,
        );

        assert_eq!(expected, got);
    }
}