8
8
from mike import mkdocs_utils
9
9
10
10
11
+ class Stream (StringIO ):
12
+ def __init__ (self , name , data = '' ):
13
+ super ().__init__ (data )
14
+ self .name = name
15
+
16
+ def close (self ):
17
+ pass
18
+
19
+
20
+ def mock_open_files (files ):
21
+ def wrapper (filename , * args , ** kwargs ):
22
+ name = os .path .basename (filename )
23
+ return Stream (name , files [name ])
24
+
25
+ return wrapper
26
+
27
+
11
28
# This mostly just tests `load_config` from MkDocs, but we want to be sure it
12
29
# behaves as we want it.
13
30
class TestLoadConfig (unittest .TestCase ):
@@ -68,14 +85,8 @@ def test_nonexist(self):
68
85
69
86
70
87
class TestInjectPlugin (unittest .TestCase ):
71
- class Stream (StringIO ):
72
- name = 'mike-mkdocs.yml'
73
-
74
- def close (self ):
75
- pass
76
-
77
88
def test_no_plugins (self ):
78
- out = self . Stream ()
89
+ out = Stream ('mike-mkdocs.yml' )
79
90
cfg = '{}'
80
91
with mock .patch ('builtins.open' , mock .mock_open (read_data = cfg )), \
81
92
mock .patch ('mike.mkdocs_utils.NamedTemporaryFile' ,
@@ -89,7 +100,7 @@ def test_no_plugins(self):
89
100
self .assertEqual (newcfg , {'plugins' : ['mike' , 'search' ]})
90
101
91
102
def test_other_plugins (self ):
92
- out = self . Stream ()
103
+ out = Stream ('mike-mkdocs.yml' )
93
104
cfg = 'plugins:\n - foo\n - bar:\n option: true'
94
105
with mock .patch ('builtins.open' , mock .mock_open (read_data = cfg )), \
95
106
mock .patch ('mike.mkdocs_utils.NamedTemporaryFile' ,
@@ -101,11 +112,31 @@ def test_other_plugins(self):
101
112
mremove .assert_called_once ()
102
113
103
114
self .assertEqual (newcfg , {'plugins' : [
104
- 'mike' , 'foo' , {'bar' : {'option' : True }}
115
+ 'mike' , 'foo' , {'bar' : {'option' : True }},
105
116
]})
106
117
118
+ def test_other_plugins_dict (self ):
119
+ out = Stream ('mike-mkdocs.yml' )
120
+ cfg = 'plugins:\n foo: {}\n bar:\n option: true'
121
+ with mock .patch ('builtins.open' , mock .mock_open (read_data = cfg )), \
122
+ mock .patch ('mike.mkdocs_utils.NamedTemporaryFile' ,
123
+ return_value = out ), \
124
+ mock .patch ('os.remove' ) as mremove : # noqa
125
+ with mkdocs_utils .inject_plugin ('mkdocs.yml' ) as f :
126
+ self .assertEqual (f , out .name )
127
+ newcfg = yaml .load (out .getvalue (), Loader = yaml .Loader )
128
+ mremove .assert_called_once ()
129
+
130
+ self .assertEqual (newcfg , {'plugins' : {
131
+ 'mike' : {}, 'foo' : {}, 'bar' : {'option' : True },
132
+ }})
133
+ self .assertEqual (
134
+ list (newcfg ['plugins' ].items ()),
135
+ [('mike' , {}), ('foo' , {}), ('bar' , {'option' : True })]
136
+ )
137
+
107
138
def test_mike_plugin (self ):
108
- out = self . Stream ()
139
+ out = Stream ('mike-mkdocs.yml' )
109
140
cfg = 'plugins:\n - mike'
110
141
with mock .patch ('builtins.open' , mock .mock_open (read_data = cfg )), \
111
142
mock .patch ('mike.mkdocs_utils.NamedTemporaryFile' ,
@@ -117,7 +148,7 @@ def test_mike_plugin(self):
117
148
mremove .assert_not_called ()
118
149
119
150
def test_mike_plugin_options (self ):
120
- out = self . Stream ()
151
+ out = Stream ('mike-mkdocs.yml' )
121
152
cfg = 'plugins:\n - mike:\n option: true'
122
153
with mock .patch ('builtins.open' , mock .mock_open (read_data = cfg )), \
123
154
mock .patch ('mike.mkdocs_utils.NamedTemporaryFile' ,
@@ -128,6 +159,29 @@ def test_mike_plugin_options(self):
128
159
self .assertEqual (out .getvalue (), '' )
129
160
mremove .assert_not_called ()
130
161
162
+ def test_inherit (self ):
163
+ out = Stream ('mike-mkdocs.yml' )
164
+ main_cfg = 'INHERIT: mkdocs-base.yml\n plugins:\n foo: {}\n '
165
+ base_cfg = 'plugins:\n bar: {}\n '
166
+ files = {'mkdocs.yml' : main_cfg , 'mkdocs-base.yml' : base_cfg }
167
+ with mock .patch ('builtins.open' , mock_open_files (files )), \
168
+ mock .patch ('mike.mkdocs_utils.NamedTemporaryFile' ,
169
+ return_value = out ), \
170
+ mock .patch ('os.path.exists' , return_value = True ), \
171
+ mock .patch ('os.remove' ) as mremove : # noqa
172
+ with mkdocs_utils .inject_plugin ('mkdocs.yml' ) as f :
173
+ self .assertEqual (f , 'mike-mkdocs.yml' )
174
+ newcfg = yaml .load (out .getvalue (), Loader = yaml .Loader )
175
+ mremove .assert_called_once ()
176
+
177
+ self .assertEqual (newcfg , {'plugins' : {
178
+ 'mike' : {}, 'bar' : {}, 'foo' : {},
179
+ }})
180
+ self .assertEqual (
181
+ list (newcfg ['plugins' ].items ()),
182
+ [('mike' , {}), ('bar' , {}), ('foo' , {})]
183
+ )
184
+
131
185
132
186
class TestBuild (unittest .TestCase ):
133
187
def test_build (self ):
0 commit comments