CaseClause.ceylon

import ceylon.ast.core {
    Block,
    CaseClause,
    CaseItem
}
import ceylon.ast.redhat {
    RedHatTransformer,
    caseClauseToCeylon,
    compileCaseClause
}
import com.redhat.ceylon.compiler.typechecker.tree {
    Tree {
        JCaseClause=CaseClause
    }
}

shared object caseClause satisfies ConcreteTest<CaseClause,JCaseClause> {
    
    String->CaseClause construct(String->CaseItem caseItem, String->Block block)
            => "case (``caseItem.key``) ``block.key``"->CaseClause(caseItem.item, block.item);
    
    shared String->CaseClause caseNullPrintHelloWorldClause = construct(matchCase.matchNullCase, block.printHelloWorldBlock);
    shared String->CaseClause caseIsStringClause = construct(isCase.isStringCase, block.emptyBlock);
    
    compile = compileCaseClause;
    fromCeylon = RedHatTransformer.transformCaseClause;
    toCeylon = caseClauseToCeylon;
    codes = [caseNullPrintHelloWorldClause, caseIsStringClause];
}