diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index fef6e43..1e15488 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -32,7 +32,7 @@ jobs: - name: Base setup uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 - - name: Setup conda ${{ matrix.PYTHON_VERSION }} + - name: Setup conda ${{ matrix.python-version }} uses: conda-incubator/setup-miniconda@v2 with: auto-update-conda: true @@ -40,8 +40,14 @@ jobs: activate-environment: jupyter_kernel_test python-version: ${{ matrix.python-version }} + - name: Install xeus-cling + if: startsWith(runner.os, 'Linux') + run: | + conda install -c conda-forge xeus-cling + - name: Install dependencies - run: pip install -e .[test] + run: | + pip install -e .[test] - name: Run the tests run: python -m unittest -v diff --git a/MANIFEST.in b/MANIFEST.in index cf17344..535da01 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,4 @@ include *.py include *.md +exclude setup_julia.sh exclude environment.yml diff --git a/jupyter_kernel_test/__init__.py b/jupyter_kernel_test/__init__.py index 0619086..d603433 100644 --- a/jupyter_kernel_test/__init__.py +++ b/jupyter_kernel_test/__init__.py @@ -229,9 +229,11 @@ def test_execute_result(self): found = True else: continue - self.assertIn('text/plain', msg['content']['data']) - self.assertEqual(msg['content']['data']['text/plain'], - sample['result']) + mime = sample.get('mime', 'text/plain') + self.assertIn(mime, msg['content']['data']) + if 'result' in sample: + self.assertEqual(msg['content']['data'][mime], + sample['result']) assert found, 'execute_result message not found' code_display_data = [] @@ -281,7 +283,7 @@ def test_history(self): raise SkipTest codes = [s['code'] for s in self.code_execute_result] - results = [s['result'] for s in self.code_execute_result] + results = [s.get('result', '') for s in self.code_execute_result] n = len(codes) session = start = None diff --git a/jupyter_kernel_test/msgspec_v5.py b/jupyter_kernel_test/msgspec_v5.py index 2b6774d..f7303ad 100644 --- a/jupyter_kernel_test/msgspec_v5.py +++ b/jupyter_kernel_test/msgspec_v5.py @@ -256,7 +256,7 @@ def validate_message(msg, msg_type=None, parent_id=None): "text": {"type": "string"}, "url": {"type": "string"} }}} -}, "required": ["status", "protocol_version", "implementation", "implementation_version", "language_info", "banner"]} +}, "required": ["status", "protocol_version", "implementation", "language_info", "banner"]} schema_fragments['shutdown_request'] = {"properties": { "restart": {"type": "boolean"}, diff --git a/test_xues_cling.py b/test_xues_cling.py new file mode 100644 index 0000000..7dffa75 --- /dev/null +++ b/test_xues_cling.py @@ -0,0 +1,43 @@ +""" +A non-python example, with tests for IRKernel (irkernel.github.io). +(Beware of python quoting/string escaping rules being different to the +language being tested) +""" + +import unittest +import shutil + +from jupyter_client.kernelspec import NoSuchKernel +import jupyter_kernel_test as jkt + + +class XeusClingKernelTests(jkt.KernelTests): + kernel_name = "xcpp17" + + @classmethod + def setUpClass(cls): + try: + cls.km, cls.kc = jkt.start_new_kernel(kernel_name=cls.kernel_name) + except NoSuchKernel: + raise unittest.SkipTest('Xeus-Cling Kernel not installed') + + language_name = "c++" + + file_extension = ".cpp" + + code_hello_world = '#include \nstd::cout << "hello, world!" << std::endl;' + + code_stderr = '#include \nstd::cerr << "some error" << std::endl;' + + complete_code_samples = ['1', "int j=5"] + incomplete_code_samples = ["double sqr(double a"] + + code_generate_error = 'throw std::runtime_error("Unknown exception");' + + code_execute_result = [ + {'code': 'int j = 5;j', 'result': "5"}, + ] + + +if __name__ == '__main__': + unittest.main()