forked from bunyk/bunyk.github.com
/
test.py
126 lines (115 loc) · 3.56 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
124
125
126
import os
import unittest
import io
from functools import reduce
def patch_open(module, filesystem):
'''
Patches function open() in module in such way,
that it opens files set as strings in filesystem dictionary
'''
def open_patch(filename):
return io.StringIO(reduce(
lambda d, k: d[k],
filename.split('/'),
filesystem
))
module.open = open_patch
class TestPatchOpen(unittest.TestCase):
def test_opens(self):
m = lambda: 0
patch_open(m, {
'directory': {
'file.txt': 'hello!',
},
})
self.assertEqual(m.open('directory/file.txt').read(), 'hello!')
class TestAbsolute(unittest.TestCase):
def test_caller_sibling(self):
from requirejs import absolute
self.assertEqual(
absolute(
'script.js',
'/home/user/project/module/',
'/home/user/project',
),
'/home/user/project/module/script.js'
)
def test_in_caller_parent(self):
from requirejs import absolute
self.assertEqual(
absolute(
'../script.js',
'/home/user/project/module/',
'/home/user/project',
),
'/home/user/project/script.js'
)
def test_in_project_root(self):
from requirejs import absolute
self.assertEqual(
absolute(
'/script.js',
'/home/user/project/module/',
'/home/user/project/',
),
'/home/user/project/script.js'
)
def test_in_project_subfolder_absolute(self):
from requirejs import absolute
self.assertEqual(
absolute(
'/assets/script.js',
'/home/user/project/module/',
'/home/user/project',
),
'/home/user/project/assets/script.js'
)
def test_relative_subfolder(self):
from requirejs import absolute
self.assertEqual(
absolute(
'assets/script.js',
'/home/user/project/module/',
'/home/user/project',
),
'/home/user/project/module/assets/script.js'
)
class TestRequireJS(unittest.TestCase):
def test_asset_type(self):
from requirejs import file_type
self.assertEqual(file_type('main.js'), 'js')
self.assertEqual(file_type('jquery.min.js'), 'js')
self.assertEqual(file_type('example.coffee'), 'coffee')
def test_requirements(self):
import requirejs
patch_open(requirejs, {
'': { # filesystem root
'project': {
'main.coffee': '# REQUIRE jquery\n'
'# REQUIRE module.coffee\n'
'# REQUIRE /deeper/module.coffee\n',
}
}
})
self.assertEqual(
list(requirejs.requirements(
'/project/main.coffee',
'/project/',
)), [
'jquery',
'/project/module.coffee',
'/project/deeper/module.coffee',
]
)
def test_topo_sort(self):
from requirejs import topo_sort
self.assertEqual(
topo_sort({
'a': [],
'b': ['a', 'c'],
'c': ['a']
}),
['a', 'c', 'b']
)
if __name__ == '__main__':
unittest.main()