fix empty tag on sketch on face (#2424)
add test Signed-off-by: Jess Frazelle <github@jessfraz.com>
This commit is contained in:
@ -995,27 +995,35 @@ async fn start_sketch_on_face(
|
|||||||
args: Args,
|
args: Args,
|
||||||
) -> Result<Box<Face>, KclError> {
|
) -> Result<Box<Face>, KclError> {
|
||||||
let extrude_plane_id = match tag {
|
let extrude_plane_id = match tag {
|
||||||
SketchOnFaceTag::String(ref s) => extrude_group
|
SketchOnFaceTag::String(ref s) => {
|
||||||
.value
|
if s.is_empty() {
|
||||||
.iter()
|
return Err(KclError::Type(KclErrorDetails {
|
||||||
.find_map(|extrude_surface| match extrude_surface {
|
message: "Expected a non-empty tag for the face to sketch on".to_string(),
|
||||||
ExtrudeSurface::ExtrudePlane(extrude_plane) if extrude_plane.name == *s => {
|
|
||||||
Some(Ok(extrude_plane.face_id))
|
|
||||||
}
|
|
||||||
ExtrudeSurface::ExtrudeArc(extrude_arc) if extrude_arc.name == *s => {
|
|
||||||
Some(Err(KclError::Type(KclErrorDetails {
|
|
||||||
message: format!("Cannot sketch on a non-planar surface: `{}`", tag),
|
|
||||||
source_ranges: vec![args.source_range],
|
|
||||||
})))
|
|
||||||
}
|
|
||||||
ExtrudeSurface::ExtrudePlane(_) | ExtrudeSurface::ExtrudeArc(_) => None,
|
|
||||||
})
|
|
||||||
.ok_or_else(|| {
|
|
||||||
KclError::Type(KclErrorDetails {
|
|
||||||
message: format!("Expected a face with the tag `{}`", tag),
|
|
||||||
source_ranges: vec![args.source_range],
|
source_ranges: vec![args.source_range],
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
extrude_group
|
||||||
|
.value
|
||||||
|
.iter()
|
||||||
|
.find_map(|extrude_surface| match extrude_surface {
|
||||||
|
ExtrudeSurface::ExtrudePlane(extrude_plane) if extrude_plane.name == *s => {
|
||||||
|
Some(Ok(extrude_plane.face_id))
|
||||||
|
}
|
||||||
|
ExtrudeSurface::ExtrudeArc(extrude_arc) if extrude_arc.name == *s => {
|
||||||
|
Some(Err(KclError::Type(KclErrorDetails {
|
||||||
|
message: format!("Cannot sketch on a non-planar surface: `{}`", tag),
|
||||||
|
source_ranges: vec![args.source_range],
|
||||||
|
})))
|
||||||
|
}
|
||||||
|
ExtrudeSurface::ExtrudePlane(_) | ExtrudeSurface::ExtrudeArc(_) => None,
|
||||||
})
|
})
|
||||||
})??,
|
.ok_or_else(|| {
|
||||||
|
KclError::Type(KclErrorDetails {
|
||||||
|
message: format!("Expected a face with the tag `{}`", tag),
|
||||||
|
source_ranges: vec![args.source_range],
|
||||||
|
})
|
||||||
|
})??
|
||||||
|
}
|
||||||
SketchOnFaceTag::StartOrEnd(StartOrEnd::Start) => extrude_group.start_cap_id.ok_or_else(|| {
|
SketchOnFaceTag::StartOrEnd(StartOrEnd::Start) => extrude_group.start_cap_id.ok_or_else(|| {
|
||||||
KclError::Type(KclErrorDetails {
|
KclError::Type(KclErrorDetails {
|
||||||
message: "Expected a start face to sketch on".to_string(),
|
message: "Expected a start face to sketch on".to_string(),
|
||||||
|
@ -2057,3 +2057,27 @@ const bracket = startSketchOn('XY')
|
|||||||
r#"engine: KclErrorDetails { source_ranges: [SourceRange([1443, 1443])], message: "Modeling command failed: Some([ApiError { error_code: BadRequest, message: \"Fillet failed\" }])" }"#
|
r#"engine: KclErrorDetails { source_ranges: [SourceRange([1443, 1443])], message: "Modeling command failed: Some([ApiError { error_code: BadRequest, message: \"Fillet failed\" }])" }"#
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tokio::test(flavor = "multi_thread")]
|
||||||
|
async fn serial_test_error_empty_start_sketch_on_string() {
|
||||||
|
let code = r#"const part001 = startSketchOn('-XZ')
|
||||||
|
|> startProfileAt([75.75, 184.25], %)
|
||||||
|
|> line([190.03, -118.13], %)
|
||||||
|
|> line([-33.38, -202.86], %)
|
||||||
|
|> line([-315.86, -64.2], %)
|
||||||
|
|> tangentialArcTo([-147.66, 121.34], %)
|
||||||
|
|> close(%)
|
||||||
|
|> extrude(100, %)
|
||||||
|
|
||||||
|
const secondSketch = startSketchOn(part001, '')
|
||||||
|
|> circle([-20, 50], 40, %)
|
||||||
|
|> extrude(20, %)
|
||||||
|
"#;
|
||||||
|
|
||||||
|
let result = execute_and_snapshot(code, kcl_lib::settings::types::UnitLength::Mm).await;
|
||||||
|
assert!(result.is_err());
|
||||||
|
assert_eq!(
|
||||||
|
result.err().unwrap().to_string(),
|
||||||
|
r#"type: KclErrorDetails { source_ranges: [SourceRange([272, 298])], message: "Expected a non-empty tag for the face to sketch on" }"#
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user