Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: FreeCAD tests

on:
push:
pull_request:

permissions:
contents: read

jobs:
tests:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
freecad: ["1.0.*", "1.1.*"]

defaults:
run:
shell: bash -el {0}

steps:
- name: Check out repository
uses: actions/checkout@v7

- name: Install FreeCAD ${{ matrix.freecad }}
uses: mamba-org/setup-micromamba@v3
with:
environment-name: freecad-ci
create-args: freecad=${{ matrix.freecad }}

- name: Install virtual display
run: sudo apt-get update && sudo apt-get install --yes xvfb

- name: Install addon
run: |
mkdir -p "$HOME/.local/share/FreeCAD/Mod"
ln -s "$GITHUB_WORKSPACE" "$HOME/.local/share/FreeCAD/Mod/FusedFilamentDesign"

- name: Run FreeCAD tests
shell: micromamba-shell {0}
run: |
set -o pipefail
freecad_executable="$(command -v FreeCAD || command -v freecad)"
xvfb-run -a "$freecad_executable" -t ffDesign_Tests 2>&1 | tee freecad-tests.log
! grep -q "Traceback (most recent call last)" freecad-tests.log
3 changes: 3 additions & 0 deletions InitGui.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,6 @@ class ffDesignWB:


register_pd_toolbar()

if "ffDesign_Tests" not in FreeCAD.__unit_test__:
FreeCAD.__unit_test__.append("ffDesign_Tests")
14 changes: 13 additions & 1 deletion ffDesign_RibThreads.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import math
import dataclasses
import re

from PySide import QtCore, QtGui

Expand Down Expand Up @@ -275,7 +276,17 @@ def rib_template_name(hole, global_template: bool):
def find_rib_template(body, hole, global_template: bool):
name = rib_template_name(hole, global_template)
if global_template:
return body.Document.getObject(name)
template = body.Document.getObject(name)
if template is None:
sanitized_name = re.sub(r"[^A-Za-z0-9_]", "_", name)
template = body.Document.getObject(sanitized_name)
if template is not None:
return template

# New templates preserve the unsanitized thread name in their Label,
# which also provides a fallback if FreeCAD's sanitization changes.
templates = body.Document.getObjectsByLabel(name)
return templates[0] if templates else None
else:
return body.getObject(name)

Expand All @@ -292,6 +303,7 @@ def get_or_create_rib_template(body, hole, global_template: bool, rib_param: Rib
name = rib_template_name(hole, global_template)
if global_template:
template = body.Document.addObject("Sketcher::SketchObject", name)
template.Label = name
else:
template = body.newObject("Sketcher::SketchObject", name)
template.Label = f"{hole.Label}_RibThread_Template"
Expand Down
Loading