forked from mikidown/mikidown
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.py
executable file
·123 lines (95 loc) · 4.21 KB
/
test.py
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
#!/usr/bin/env python3
import glob
import os
import sys
import unittest
from PyQt5.QtWidgets import QApplication
import mikidown
from mikidown.mikiwindow import MikiWindow
from mikidown.mikibook import Mikibook
from mikidown.config import Setting
from mikidown.utils import allMDExtensions, JSCRIPT_TPL
import shutil
app = QApplication(sys.argv)
# app.exec_()
class Monolithic(unittest.TestCase):
def step0(self):
print("\nStep 0: create notebook")
path = os.path.join(os.getcwd(), "test_notebook")
Mikibook.initialise("test", path)
self.settings = Setting([["test", path]])
self.window = MikiWindow(self.settings)
self.window.show()
def step1(self):
print("\nStep 1: newPage")
self.window.notesTree.newPage('pageOne')
self.window.notesTree.newSubpage('subpageOne')
itemOne = self.window.notesTree.pageToItem('pageOne')
self.window.notesTree.setCurrentItem(itemOne)
self.window.notesTree.newPage('pageTwo')
def step2(self):
print("\nStep 2: setText")
self.window.liveView(True)
self.window.notesEdit.setText("# head1\n\n"
"## head2\n"
"[subpageOne](pageOne/subpageOne)")
self.window.saveCurrentNote()
self.window.notesView.updateView()
#self.window.notesView.setVisible(True)
elemCol = self.window.notesView.page(
).mainFrame().findAllElements("a")
element = elemCol.at(2)
# print(self.window.notesView.page().mainFrame().toHtml())
# print(element.attribute("href"))
element.evaluateJavaScript("var evObj = document.createEvent('MouseEvents');evObj.initEvent( 'click', true, true );this.dispatchEvent(evObj);")
noteName = self.window.notesTree.currentItem().text(0)
self.assertEqual(noteName, "subpageOne")
def step3(self):
print("\nStep 3: page link")
self.window.notesEdit.setText("[head2](pageTwo#head2)")
self.window.saveCurrentNote()
self.window.notesView.updateView()
element = self.window.notesView.page(
).mainFrame().findFirstElement("a")
element.evaluateJavaScript("var evObj = document.createEvent('MouseEvents');evObj.initEvent( 'click', true, true );this.dispatchEvent(evObj);")
noteName = self.window.notesTree.currentItem().text(0)
self.assertEqual(noteName, "pageTwo")
def step4(self):
print("\nStep 4: delPage")
# This will delete both pageOne and subpageOne
item = self.window.notesTree.pageToItem('pageOne')
self.window.notesTree.delPage(item)
item = self.window.notesTree.pageToItem('pageTwo')
self.window.notesTree.delPage(item)
def step5(self):
print("Step 5: extension detection check")
print(" Checking available modules first...")
exts = allMDExtensions()
if 'asciimathml' in exts:
print(" asciimathml should be enabled in defaults since we found it")
self.assertTrue('asciimathml' in self.settings.extensions)
print(" did we auto-attach the configured javascript too?")
self.assertTrue(JSCRIPT_TPL.format(self.settings.mathjax)[:-1] in self.window.notesView.page().mainFrame().toHtml())
else:
print(" asciimathml should not be enabled in defaults since we found it")
self.assertFalse('asciimathml' in self.settings.extensions)
print(" did we not auto-attach the configured javascript too?")
self.assertFalse(JSCRIPT_TPL.format(self.settings.mathjax)[:-1] in self.window.notesView.page().mainFrame().toHtml())
#print(exts)
def step6(self):
print("\nLast step: clean up")
shutil.rmtree("test_notebook")
def steps(self):
for name in sorted(dir(self)):
if name.startswith("step"):
yield name, getattr(self, name)
def test_steps(self):
for name, step in self.steps():
try:
step()
except Exception as e:
self.fail("{} failed ({}: {})".format(step, type(e), e))
def main():
unittest.main()
if __name__ == '__main__':
main()