* Fix examples * Added test for examples * Fix example testing code * Sweep example fix * Reformat examples * Test examples from the docs too * Add docutils to the test requirements * Example test fix on win+cleanup * Use union
73 lines
1.6 KiB
Python
Executable File
73 lines
1.6 KiB
Python
Executable File
import pytest
|
|
|
|
from glob import glob
|
|
from itertools import chain, count
|
|
|
|
from docutils.parsers.rst import directives, Directive
|
|
from docutils.core import publish_doctree
|
|
from docutils.utils import Reporter
|
|
|
|
import cadquery as cq
|
|
from cadquery import cqgi
|
|
from cadquery.cq_directive import cq_directive
|
|
|
|
|
|
def find_examples(pattern="examples/*.py"):
|
|
|
|
for p in glob(pattern):
|
|
with open(p, encoding="UTF-8") as f:
|
|
code = f.read()
|
|
|
|
yield code
|
|
|
|
|
|
def find_examples_in_docs(pattern="doc/*.rst"):
|
|
|
|
# dummy CQ directive for code
|
|
class dummy_cq_directive(cq_directive):
|
|
|
|
codes = []
|
|
|
|
def run(self):
|
|
|
|
self.codes.append("\n".join(self.content))
|
|
|
|
return []
|
|
|
|
directives.register_directive("cadquery", dummy_cq_directive)
|
|
|
|
# read and parse all rst files
|
|
for p in glob(pattern):
|
|
with open(p, encoding="UTF-8") as f:
|
|
doc = f.read()
|
|
|
|
publish_doctree(
|
|
doc, settings_overrides={"report_level": Reporter.SEVERE_LEVEL + 1}
|
|
)
|
|
|
|
# yield all code snippets
|
|
for c in dummy_cq_directive.codes:
|
|
|
|
yield c
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"code", chain(find_examples(), find_examples_in_docs()), ids=count(0)
|
|
)
|
|
def test_example(code):
|
|
|
|
# build
|
|
res = cqgi.parse(code).build()
|
|
|
|
assert res.exception is None
|
|
|
|
# check if the resulting objects are valid
|
|
for r in res.results:
|
|
r = r.shape
|
|
if isinstance(r, cq.Workplane):
|
|
for v in r.vals():
|
|
if isinstance(v, cq.Shape):
|
|
assert v.isValid()
|
|
elif isinstance(r, cq.Shape):
|
|
assert r.isValid()
|