package click.kamil.springstatemachineexporter.analysis.service;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

/**
 * DFM all-arms spike gate (Phase 5).
 *
 * <p><b>Mechanism (as of shared-switch refactor):</b> teaching
 * {@code JdtDataFlowModel} to treat unbound switch selectors as “collect every arm”
 * via {@code SwitchConstSupport} improves poly in isolation but previously dropped
 * string-dispatch export chains ({@link StringDispatchCallGraphGapTest}) when landed
 * alone. Documented interactions to fix before merge:
 * <ul>
 *   <li>{@code ENUM_SET} treated as enum-like for path constraints / storage</li>
 *   <li>call-graph {@code targetMethod} caller-package qualification
 *       (see {@link CallGraphReceiverTypeQualificationTest})</li>
 *   <li>path-walk type-compat treating {@code ENUM_SET:A.B,C.D} as a type FQN and
 *       skipping the edge (bare trigger param → {@code <SYMBOLIC:…>})</li>
 * </ul>
 *
 * <p>Do not enable / merge DFM all-arms until this test is green with a real DFM
 * all-arms implementation and the failure modes above are fixed using shared
 * {@link click.kamil.springstatemachineexporter.ast.common.AstUtils} tokens +
 * {@link click.kamil.springstatemachineexporter.analysis.resolver.ConstantResolver#concreteSwitchSelector}.
 */
@Disabled("DFM all-arms deferred until StringDispatch root cause is fixed under shared tokens/policy")
class DfmAllArmsStringDispatchRegressionTest {

    @Test
    void dfmAllArmsMustNotDropStringDispatchPayChain() {
        // Placeholder: when enabling DFM all-arms, replace with the StringDispatch gap assertion
        // (or call that test) under the DFM change.
        org.junit.jupiter.api.Assertions.fail("Enable only together with DFM all-arms + green StringDispatch");
    }
}
