generated from jCloud/repository-template
Feat(cli): add base command-line interface #16
No files matched your search
@@ -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
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# Module `pkg.module`
|
||||||
|
|
||||||
|
## Function `f`
|
||||||
|
|
||||||
|
Does something.
|
||||||
|
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
|
||||||
|
| Parameter | Type | Kind | Default value | Description |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| `a` | `int` | normal | `42` | A parameter. |
|
||||||
|
|
||||||
|
<details><summary><h3 style="display:inline">Docstring</h3></summary>Does something.
|
||||||
|
|
||||||
|
:param a: A parameter.
|
||||||
|
:type a: int
|
||||||
|
|
||||||
|
:return: A string.
|
||||||
|
:rtype: str</details>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
def f(a: int = 42) -> str:
|
||||||
|
'''
|
||||||
|
Does something.
|
||||||
|
|
||||||
|
:param a: A parameter.
|
||||||
|
:type a: int
|
||||||
|
|
||||||
|
:return: A string.
|
||||||
|
:rtype: str
|
||||||
|
'''
|
||||||
|
...
|
||||||
@@ -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])
|
||||||
@@ -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)
|
||||||
|
])
|
||||||
Reference in new issue
Block a user