4
4
# Copyright (c) Jupyter Development Team.
5
5
# Distributed under the terms of the Modified BSD License.
6
6
7
+ import copy
7
8
import io
8
9
import json
9
10
from logging import StreamHandler
10
11
import os
11
12
from os .path import join as pjoin
12
13
from subprocess import Popen , PIPE , STDOUT
13
14
import sys
15
+ import tempfile
14
16
import unittest
15
17
16
18
import pytest
@@ -156,7 +158,7 @@ def test_validate_kernel_name(self):
156
158
'Haskell-1-2-3' ,
157
159
]:
158
160
assert kernelspec ._is_valid_kernel_name (good )
159
-
161
+
160
162
for bad in [
161
163
'has space' ,
162
164
u'ünicode' ,
@@ -165,4 +167,33 @@ def test_validate_kernel_name(self):
165
167
]:
166
168
assert not kernelspec ._is_valid_kernel_name (bad )
167
169
168
-
170
+ def test_subclass (self ):
171
+ """Test get_all_specs in subclasses that override find_kernel_specs"""
172
+ ksm = self .ksm
173
+ resource_dir = tempfile .gettempdir ()
174
+ native_name = kernelspec .NATIVE_KERNEL_NAME
175
+ native_kernel = ksm .get_kernel_spec (native_name )
176
+
177
+ class MyKSM (kernelspec .KernelSpecManager ):
178
+ def get_kernel_spec (self , name ):
179
+ spec = copy .copy (native_kernel )
180
+ if name == 'fake' :
181
+ spec .name = name
182
+ spec .resource_dir = resource_dir
183
+ elif name == native_name :
184
+ pass
185
+ else :
186
+ raise KeyError (name )
187
+ return spec
188
+
189
+ def find_kernel_specs (self ):
190
+ return {
191
+ 'fake' : resource_dir ,
192
+ native_name : native_kernel .resource_dir ,
193
+ }
194
+
195
+ # ensure that get_all_specs doesn't raise if only
196
+ # find_kernel_specs and get_kernel_spec are defined
197
+ myksm = MyKSM ()
198
+ specs = myksm .get_all_specs ()
199
+ assert sorted (specs ) == ['fake' , native_name ]
0 commit comments