forked from balisujohn/localwriter
-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathtest_python_runner_formatting.py
More file actions
103 lines (87 loc) · 4.24 KB
/
Copy pathtest_python_runner_formatting.py
File metadata and controls
103 lines (87 loc) · 4.24 KB
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
# WriterAgent - AI Writing Assistant for LibreOffice
# Copyright (c) 2026 KeithCu (modifications and relicensing)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
import unittest
from plugin.scripting.python_runner import format_result_for_writer, format_elapsed_time
class TestPythonRunnerFormatting(unittest.TestCase):
def test_format_elapsed_time(self):
# Minutes and seconds
self.assertEqual(format_elapsed_time(60.0), "1m 0s")
self.assertEqual(format_elapsed_time(75.3), "1m 15s")
self.assertEqual(format_elapsed_time(125.9), "2m 5s")
# Seconds and hundreds
self.assertEqual(format_elapsed_time(1.0), "1.00s")
self.assertEqual(format_elapsed_time(3.45), "3.45s")
self.assertEqual(format_elapsed_time(59.999), "60.00s") # boundary case (or minutes)
# Milliseconds (1-999 ms)
self.assertEqual(format_elapsed_time(0.999), "999 ms")
self.assertEqual(format_elapsed_time(0.5), "500 ms")
self.assertEqual(format_elapsed_time(0.001), "1 ms")
# Less than 1 millisecond
self.assertEqual(format_elapsed_time(0.0005), "<1 ms")
self.assertEqual(format_elapsed_time(0.0), "<1 ms")
def test_format_string(self):
self.assertEqual(format_result_for_writer("hello"), "hello")
self.assertEqual(format_result_for_writer(123), "123")
def test_format_zero(self):
self.assertEqual(format_result_for_writer(0), "0")
self.assertEqual(format_result_for_writer(0.0), "0.0")
def test_format_list_of_lists(self):
data = [["A", "B"], [1, 2]]
expected = '<table border="1"><tr><td>A</td><td>B</td></tr><tr><td>1</td><td>2</td></tr></table>'
self.assertEqual(format_result_for_writer(data), expected)
def test_format_list_of_dicts(self):
data = [{"Name": "Alice", "Age": 30}, {"Name": "Bob", "Age": 25}]
expected = '<table border="1"><thead><tr><th>Name</th><th>Age</th></tr></thead><tbody><tr><td>Alice</td><td>30</td></tr><tr><td>Bob</td><td>25</td></tr></tbody></table>'
self.assertEqual(format_result_for_writer(data), expected)
def test_format_complex_dict_order(self):
# We now respect insertion order strictly.
data = {
"title": "My Title",
"data": [{"A": 1}],
"total": 100,
"summary_text": "Finish"
}
res = format_result_for_writer(data)
# Order should be: title, data, total, summary_text
title_idx = res.find("My Title")
data_idx = res.find("data")
total_idx = res.find("total")
summary_idx = res.find("Finish")
self.assertLess(title_idx, data_idx)
self.assertLess(data_idx, total_idx)
self.assertLess(total_idx, summary_idx)
# Priority keys (title, summary_text) should NOT have labels
# but SHOULD be bold
self.assertIn("<p><b>My Title</b></p>", res)
self.assertIn("<p><b>Finish</b></p>", res)
self.assertNotIn("<b>title:</b>", res)
self.assertNotIn("<b>summary_text:</b>", res)
# Non-priority keys SHOULD have labels
self.assertIn("<b>total:</b>", res)
def test_format_priority_keys_non_string(self):
data = {
"title": 12345,
"summary": 99.9,
"message": True,
"result": {"nested": "value"}
}
res = format_result_for_writer(data)
self.assertIn("<p><b>12345</b></p>", res)
self.assertIn("<p><b>99.9</b></p>", res)
self.assertIn("<p><b>True</b></p>", res)
self.assertIn("<p><b>{'nested': 'value'}</b></p>", res)
self.assertNotIn("<b>title:</b>", res)
self.assertNotIn("<b>summary:</b>", res)
self.assertNotIn("<b>message:</b>", res)
self.assertNotIn("<b>result:</b>", res)
def test_empty_or_none(self):
self.assertEqual(format_result_for_writer(None), "")
self.assertEqual(format_result_for_writer([]), "")
self.assertEqual(format_result_for_writer(""), "")
if __name__ == "__main__":
unittest.main()