Skip to content

Commit 7dfa6c4

Browse files
committed
test that KernelSpecManager subclasses work if they don't implement get_all_specs
1 parent ca73a87 commit 7dfa6c4

File tree

1 file changed

+33
-2
lines changed

1 file changed

+33
-2
lines changed

jupyter_client/tests/test_kernelspec.py

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
# Copyright (c) Jupyter Development Team.
55
# Distributed under the terms of the Modified BSD License.
66

7+
import copy
78
import io
89
import json
910
from logging import StreamHandler
1011
import os
1112
from os.path import join as pjoin
1213
from subprocess import Popen, PIPE, STDOUT
1314
import sys
15+
import tempfile
1416
import unittest
1517

1618
import pytest
@@ -156,7 +158,7 @@ def test_validate_kernel_name(self):
156158
'Haskell-1-2-3',
157159
]:
158160
assert kernelspec._is_valid_kernel_name(good)
159-
161+
160162
for bad in [
161163
'has space',
162164
u'ünicode',
@@ -165,4 +167,33 @@ def test_validate_kernel_name(self):
165167
]:
166168
assert not kernelspec._is_valid_kernel_name(bad)
167169

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

Comments
 (0)