use oxc_cfg::{ControlFlowGraphBuilder, CtxCursor};
use oxc_syntax::node::AstNodeId;
/// same as but just the skeleton
/// ```js
/// A: {
///   do {} while (a);
///   do {} while (b);
///   break A;
/// }
/// ```
#[test]
fn labeled_statement_with_multiple_loops_continue_and_break() {
    const A: Option<&str> = Some("A");

    let mut cfg = ControlFlowGraphBuilder::default();
    cfg.attach_error_harness(oxc_cfg::ErrorEdgeKind::Implicit);

    // labeled block start
    let labeled = cfg.new_basic_block_normal();
    cfg.ctx(A).default().allow_break().allow_continue();

    // loop context 1
    let c1 = cfg.new_basic_block_normal();
    cfg.ctx(None).default().allow_break().allow_continue();
    cfg.ctx(None).mark_break(c1).mark_continue(c1).resolve_with_upper_label();

    // loop context 2
    let c2 = cfg.new_basic_block_normal();
    cfg.ctx(None).default().allow_break().allow_continue();
    cfg.ctx(None).mark_break(c2).mark_continue(c2).resolve_with_upper_label();

    cfg.append_break(AstNodeId::DUMMY, A);

    // labeled block end
    cfg.ctx(A).mark_break(labeled).resolve();

    cfg.build();
}
