diff --git a/tests/integration/cli/test_cli.py b/tests/integration/cli/test_cli.py new file mode 100644 index 0000000..1e2d1f1 --- /dev/null +++ b/tests/integration/cli/test_cli.py @@ -0,0 +1,34 @@ +# Copyright 2026 jCloud + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import subprocess +import sys + +def test_cli(): + result = subprocess.run( + [ + sys.executable, + '-m', + 'jcloud_docsgen', + '--help' + ], + capture_output = True, + text = True + ) + stdout = result.stdout.lower() + assert \ + 'usage:' in stdout and \ + 'positional arguments' in stdout and \ + 'options' in stdout and \ + '--help' in stdout diff --git a/tests/unit/cli/python_project/expected/pkg/module.md b/tests/unit/cli/python_project/expected/pkg/module.md new file mode 100644 index 0000000..7b92bdc --- /dev/null +++ b/tests/unit/cli/python_project/expected/pkg/module.md @@ -0,0 +1,20 @@ +# Module `pkg.module` + +## Function `f` + +Does something. + + +### Parameters + +| Parameter | Type | Kind | Default value | Description | +| --- | --- | --- | --- | --- | +| `a` | `int` | normal | `42` | A parameter. | + +

Docstring

Does something. + +:param a: A parameter. +:type a: int + +:return: A string. +:rtype: str
\ No newline at end of file diff --git a/tests/unit/cli/python_project/project/src/pkg/module.py b/tests/unit/cli/python_project/project/src/pkg/module.py new file mode 100644 index 0000000..fd01ebd --- /dev/null +++ b/tests/unit/cli/python_project/project/src/pkg/module.py @@ -0,0 +1,11 @@ +def f(a: int = 42) -> str: + ''' + Does something. + + :param a: A parameter. + :type a: int + + :return: A string. + :rtype: str + ''' + ... diff --git a/tests/unit/cli/test_parser.py b/tests/unit/cli/test_parser.py new file mode 100644 index 0000000..7eb5a19 --- /dev/null +++ b/tests/unit/cli/test_parser.py @@ -0,0 +1,34 @@ +# Copyright 2026 jCloud + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import pytest +from jcloud_docsgen.cli.cli import create_argument_parser + +@pytest.mark.parametrize('lang', [ + 'javascript', + 'Python', + 'PYTHON' +]) +def test_language_error(lang): + parser = create_argument_parser() + + with pytest.raises(SystemExit): + parser.parse_args([lang]) + +@pytest.mark.parametrize('lang', [ + 'python' +]) +def test_language_success(lang): + parser = create_argument_parser() + parser.parse_args([lang]) diff --git a/tests/unit/cli/test_python.py b/tests/unit/cli/test_python.py new file mode 100644 index 0000000..947f566 --- /dev/null +++ b/tests/unit/cli/test_python.py @@ -0,0 +1,64 @@ +# Copyright 2026 jCloud + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import pathlib +import pytest +from jcloud_docsgen.cli.cli import create_argument_parser, main as cli_main + +def test_sections_error(): + parser = create_argument_parser() + + with pytest.raises(SystemExit): + parser.parse_args([ + 'python', + '-s', + 'param' # correct: `params` + ]) + + with pytest.raises(SystemExit): + parser.parse_args([ + 'python', + '-s', + 'params', + 'docstrng' # correct: `docstring` + ]) + +def test_sections_success(): + parser = create_argument_parser() + + parser.parse_args([ + 'python', + '-s', + 'params' + ]) + parser.parse_args([ + 'python', + '-s', + 'params', + 'docstring' + ]) + +def test_docs_generation(expectdir): + with expectdir('python_project') as output_dir: + output_dir: pathlib.Path + input_dir = pathlib.Path(__file__).parent / 'python_project/project' + cli_main([ + 'python', + '-s', + 'params', + 'docstring', + '-HTo', + str(output_dir), + str(input_dir) + ])