Mercurial > octave-libtiff
diff test/jupyter-notebook/JupyterNotebook.tst @ 30169:cefa5d2d30bc
New class for filling and running Jupyter Notebooks.
* NEWS: Add to list of new functions announce feature.
* scripts/miscellaneous/JupyterNotebook.m: New classdef class.
* scripts/miscellaneous/module.mk: Add JupyterNotebook to build system.
* test/jupyter-notebook/JupyterNotebook.tst,
test/jupyter-notebook/octave_kernel.ipynb,
test/jupyter-notebook/plot_magic_and_errors.ipynb: New test files.
* test/jupyter-notebook/module.mk: Add new test files to build system.
* test/module.mk: Add "jupyter-notebook" directory to build system.
This is the result of GSoC 2021 by Abdallah Elshamy.
Patch pushed by Kai T. Ohlhus.
author | Abdallah Elshamy <abdallah.k.elshamy@gmail.com> |
---|---|
date | Tue, 14 Sep 2021 17:54:04 +0900 |
parents | |
children | 00c30b1c8250 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jupyter-notebook/JupyterNotebook.tst Tue Sep 14 17:54:04 2021 +0900 @@ -0,0 +1,231 @@ +######################################################################## +## +## Copyright (C) 2021 The Octave Project Developers +## +## See the file COPYRIGHT.md in the top-level directory of this +## distribution or <https://octave.org/copyright/>. +## +## This file is part of Octave. +## +## Octave is free software: you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## <https://www.gnu.org/licenses/>. +## +######################################################################## + + + + + +%! visibility = get (0, "defaultfigurevisible"); +%! toolkit = graphics_toolkit (); +%! unwind_protect +%! if (! __have_feature__ ("QT_OFFSCREEN") +%! || ! strcmp (graphics_toolkit (), "qt")) +%! try +%! graphics_toolkit ("gnuplot"); +%! catch +%! ## The system doesn't support gnuplot for drawing hidden +%! ## figures. Just return and have test marked as passing. +%! return; +%! end_try_catch +%! endif +%! set (0, "defaultfigurevisible", "off"); +%! + + +%! unwind_protect_cleanup +%! set (0, "defaultfigurevisible", visibility); +%! graphics_toolkit (toolkit); +%! end_unwind_protect + + + + + + +## Test running a single cell +%!test +%! visibility = get (0, "defaultfigurevisible"); +%! toolkit = graphics_toolkit (); +%! unwind_protect +%! if (! __have_feature__ ("QT_OFFSCREEN") +%! || ! strcmp (graphics_toolkit (), "qt")) +%! try +%! graphics_toolkit ("gnuplot"); +%! catch +%! ## The system doesn't support gnuplot for drawing hidden +%! ## figures. Just return and have test marked as passing. +%! return; +%! end_try_catch +%! endif +%! set (0, "defaultfigurevisible", "off"); +%! +%! n = JupyterNotebook (fullfile ("octave_kernel.ipynb")); +%! +%! ## Test embedding images +%! n.run (2); +%! assert (n.notebook.cells{2}.outputs{1}.output_type, "display_data") +%! assert (isfield (n.notebook.cells{2}.outputs{1}.data, "image/png")); +%! assert (getfield (n.notebook.cells{2}.outputs{1}.data, "text/plain"), +%! {"<IPython.core.display.Image object>"}); +%! +%! ## Test running non-code cells +%! markdown_cell = n.notebook.cells{1}; +%! n.run (1); +%! assert (markdown_cell, n.notebook.cells{1}); +%! unwind_protect_cleanup +%! set (0, "defaultfigurevisible", visibility); +%! graphics_toolkit (toolkit); +%! end_unwind_protect + +## Test running all cells +%!test +%! visibility = get (0, "defaultfigurevisible"); +%! toolkit = graphics_toolkit (); +%! unwind_protect +%! if (! __have_feature__ ("QT_OFFSCREEN") +%! || ! strcmp (graphics_toolkit (), "qt")) +%! try +%! graphics_toolkit ("gnuplot"); +%! catch +%! ## The system doesn't support gnuplot for drawing hidden +%! ## figures. Just return and have test marked as passing. +%! return; +%! end_try_catch +%! endif +%! set (0, "defaultfigurevisible", "off"); +%! +%! n = JupyterNotebook (fullfile ("octave_kernel.ipynb")); +%! n.runAll (); +%! +%! ## Test embedding images +%! assert (n.notebook.cells{3}.outputs{1}.output_type, "display_data") +%! assert (isfield (n.notebook.cells{3}.outputs{1}.data, "image/png")); +%! assert (getfield (n.notebook.cells{3}.outputs{1}.data, "text/plain"), +%! {"<IPython.core.display.Image object>"}); +%! +%! ## Test running non-code cells +%! markdown_cell = n.notebook.cells{1}; +%! n.run (1); +%! assert (markdown_cell, n.notebook.cells{1}); +%! +%! ## Test embedding textual output +%! assert (n.notebook.cells{6}.outputs{1}.output_type, "stream") +%! assert (n.notebook.cells{6}.outputs{1}.name, "stdout"); +%! unwind_protect_cleanup +%! set (0, "defaultfigurevisible", visibility); +%! graphics_toolkit (toolkit); +%! end_unwind_protect + +## Test plot magic +%!test +%! visibility = get (0, "defaultfigurevisible"); +%! toolkit = graphics_toolkit (); +%! unwind_protect +%! if (! __have_feature__ ("QT_OFFSCREEN") +%! || ! strcmp (graphics_toolkit (), "qt")) +%! try +%! graphics_toolkit ("gnuplot"); +%! catch +%! ## The system doesn't support gnuplot for drawing hidden +%! ## figures. Just return and have test marked as passing. +%! return; +%! end_try_catch +%! endif +%! set (0, "defaultfigurevisible", "off"); +%! +%! n = JupyterNotebook (fullfile ("plot_magic_and_errors.ipynb")); +%! +%! ## PNG format +%! n.run (1); +%! assert (n.notebook.cells{1}.outputs{1}.output_type, "display_data") +%! assert (isfield (n.notebook.cells{1}.outputs{1}.data, "image/png")); +%! assert (getfield (n.notebook.cells{1}.outputs{1}.data, "text/plain"), +%! {"<IPython.core.display.Image object>"}); +%! +%! ## SVG format +%! n.run (2); +%! assert (n.notebook.cells{2}.outputs{1}.output_type, "display_data") +%! assert (isfield (n.notebook.cells{2}.outputs{1}.data, "image/svg+xml")); +%! assert (getfield (n.notebook.cells{2}.outputs{1}.data, "text/plain"), +%! {"<IPython.core.display.SVG object>"}); +%! +%! ## JPG format +%! n.run (3); +%! assert (n.notebook.cells{3}.outputs{1}.output_type, "display_data") +%! assert (isfield (n.notebook.cells{3}.outputs{1}.data, "image/jpeg")); +%! assert (getfield (n.notebook.cells{3}.outputs{1}.data, "text/plain"), +%! {"<IPython.core.display.Image object>"}); +%! unwind_protect_cleanup +%! set (0, "defaultfigurevisible", visibility); +%! graphics_toolkit (toolkit); +%! end_unwind_protect + +## Test errors +%!test +%! visibility = get (0, "defaultfigurevisible"); +%! toolkit = graphics_toolkit (); +%! unwind_protect +%! if (! __have_feature__ ("QT_OFFSCREEN") +%! || ! strcmp (graphics_toolkit (), "qt")) +%! try +%! graphics_toolkit ("gnuplot"); +%! catch +%! ## The system doesn't support gnuplot for drawing hidden +%! ## figures. Just return and have test marked as passing. +%! return; +%! end_try_catch +%! endif +%! set (0, "defaultfigurevisible", "off"); +%! +%! n = JupyterNotebook (fullfile ("plot_magic_and_errors.ipynb")); +%! +%! ## Wrong resolution +%! n.run (4); +%! assert (n.notebook.cells{4}.outputs{1}.output_type, "stream") +%! assert (n.notebook.cells{4}.outputs{1}.name, "stderr"); +%! assert (n.notebook.cells{4}.outputs{1}.text, +%! {"A number is required for resolution, not a string"}); +%! +%! ## Wrong width +%! n.run (5); +%! assert (n.notebook.cells{5}.outputs{1}.output_type, "stream") +%! assert (n.notebook.cells{5}.outputs{1}.name, "stderr"); +%! assert (n.notebook.cells{5}.outputs{1}.text, +%! {"A number is required for width, not a string"}); +%! +%! ## Wrong height +%! n.run (6); +%! assert (n.notebook.cells{6}.outputs{1}.output_type, "stream") +%! assert (n.notebook.cells{6}.outputs{1}.name, "stderr"); +%! assert (n.notebook.cells{6}.outputs{1}.text, +%! {"A number is required for height, not a string"}); +%! +%! ## Empty figure +%! n.run (7); +%! assert (n.notebook.cells{7}.outputs{1}.output_type, "stream") +%! assert (n.notebook.cells{7}.outputs{1}.name, "stderr"); +%! assert (n.notebook.cells{7}.outputs{1}.text, +%! {"The figure is empty!"}); +%! +%! ## Wrong format +%! n.run (8); +%! assert (n.notebook.cells{8}.outputs{1}.output_type, "stream") +%! assert (n.notebook.cells{8}.outputs{1}.name, "stderr"); +%! assert (n.notebook.cells{8}.outputs{1}.text, +%! {"Cannot embed the 'pdf' image format\n"}); +%! unwind_protect_cleanup +%! set (0, "defaultfigurevisible", visibility); +%! graphics_toolkit (toolkit); +%! end_unwind_protect