All files / src/cds/expressions cds_case.ts

100% Statements 13/13
100% Branches 1/1
100% Functions 1/1
100% Lines 13/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 131x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x
import {CDSArithmetics, CDSCast, CDSCondition, CDSFunction, CDSName, CDSString} from ".";
import {alt, altPrio, Expression, opt, optPrio, plus, seq} from "../../abap/2_statements/combi";
import {IStatementRunnable} from "../../abap/2_statements/statement_runnable";
 
export class CDSCase extends Expression {
  public getRunnable(): IStatementRunnable {
    const name = seq(CDSName, optPrio(seq(".", CDSName)));
    const value = alt(name, CDSString, CDSFunction, CDSCase, CDSCast, CDSArithmetics);
    const simple = seq("CASE", alt(name, CDSFunction), plus(seq("WHEN", value, "THEN", value)), "ELSE", value, "END");
    const complex = seq("CASE", plus(seq("WHEN", CDSCondition, "THEN", value)), opt(seq("ELSE", value)), "END");
    return altPrio(simple, complex);
  }
}