BPMN document adapter for diagrams.mbt
///|
test "select a semantic process without requiring DI during conversion" {
let source = "<b:definitions xmlns:b='http://www.omg.org/spec/BPMN/20100524/MODEL' targetNamespace='urn:example'><b:process id='P'><b:userTask id='T' name='Review'/></b:process><b:process id='Other'/></b:definitions>"
let document = @bpmn.read(source).document.unwrap()
let ambiguous = @adapter.to_diagram(document)
assert_eq(ambiguous.diagnostics[0].code, "bpmn/ambiguous-view")
let selected = @adapter.to_diagram(document, selector=Process("P"))
guard selected.diagram is Some(Bpmn(view)) else { fail("missing process") }
assert_eq(view.source.source_id, Some("P"))
assert_eq(view.nodes[0].kind, UserTask)
assert_eq(view.nodes[0].geometry, None)
}///|
test "render semantic input or require supplied DI explicitly" {
let source="<b:definitions xmlns:b='http://www.omg.org/spec/BPMN/20100524/MODEL' targetNamespace='urn:example'><b:process id='P'><b:userTask id='T' name='Review'/></b:process></b:definitions>"
let automatic=@adapter.render_svg(source,geometry_policy=Automatic)
assert_true(automatic.output != None)
assert_eq(automatic.diagnostics,[])
let required=@adapter.render_svg(source,geometry_policy=RequireDi)
assert_eq(required.output,None)
assert_eq(required.diagnostics[0].code,"bpmn/incomplete-di")
}///|
test "conversion retains an anonymous node without editing the source" {
let document = @bpmn.read("<b:definitions xmlns:b='http://www.omg.org/spec/BPMN/20100524/MODEL' targetNamespace='urn:example'><b:process id='P'><b:task/></b:process></b:definitions>").document.unwrap()
let before = @bpmn.write(document)
guard @adapter.to_diagram(document).diagram is Some(Bpmn(view)) else { fail("missing process") }
assert_eq(view.nodes[0].source.source_id, None)
assert_eq(view.nodes[0].source.path, [0, 0, 0])
assert_eq(@bpmn.write(document), before)
}pub struct Conversion {
diagram : Diagram?
diagnostics : ReadOnlyArray[Diagnostic]
} derive(Eq, Debug)fn render_svg(source : String, selector? : ViewSelector, resources? : ResourceSet, geometry_policy? : GeometryPolicy) -> Renderedfn to_diagram(document : Document, selector? : ViewSelector, resources? : ResourceSet, resource_id? : String, limits? : Limits, geometry_policy? : GeometryPolicy) -> Conversion