<?php

// Valid SWITCH statement.
switch ($something) {
    case '1':
        $case = '1';
    break;

    case '2':
    case '3':
        $case = '5';
    break;

    case '4':
        $case = '4';
    break;

    default:
        $case = null;
    break;
}

// Alignment wrong.
switch ($something) {
    case '1':
        $case = '1';
        return '1';

case '2':
    case '3':
        $case = '5';
    break;

case '4':
    $case = '4';
break;

    default:
        $case = null;
    break;
}

// Closing brace wrong.
switch ($something) {
    case '1':
        $case = '1';
    break;
    }

// PEAR style.
switch ($something) {
case '1':
    $case = '1';
    break;
case '2':
case '3':
    $case = '5';
    break;
case '4':
    $case = '4';
    break;
default:
    $case = null;
    break;
}

// Valid, but missing BREAKS.
switch ($something) {
    case '1':
        $case = '1';

    case '2':
    case '3':
        $case = '5';

    case '4':
        $case = '4';

    default:
        $case = null;
}

// Invalid, and missing BREAKS.
switch ($something) {
    Case '1' :
        $case = '1';

case  '2':
    case  '3' :
        $case = '5';

    case'4':
        $case = '4';

    Default :
        $case = null;
        $something = 'hello';
        $other = 'hi';
    }

// Valid
switch ($condition) {
    case 'string':
        $varStr = 'test';

    default:
        // Ignore the default.
    break;
}

// No default comment
switch ($condition) {
    case 'string':
        $varStr = 'test';

    default:
    break;
}

// Break problems
switch ($condition) {
    case 'string':


        $varStr = 'test';

    break;


    case 'bool':
        $varStr = 'test';


    break;
    default:

        $varStr = 'test';
    break;

}

switch ($var) {
    case 'one':
    case 'two':
    break;

    case 'three':
        // Nothing to do.
    break;

    case 'four':
        echo $hi;
    break;

    default:
        // No default.
    break;
}

switch ($var) {
    case 'one':
        if ($blah) {
        }

    break;

    default:
        // No default.
    break;
}

switch ($name) {
    case "1":
        switch ($name2) {
            case "1":
                return true;
            break;

            case "2":
            return true;
            break;

            default:
                // No default.
            break;
        }
    break;

    case "2":
switch ($name2) {
    case "1":
        return true;
    break;

    case "2":
    return true;
    break;

    default:
        // No default.
    break;
}
    break;
}

switch ($name) {
    case "1":
        switch ($name2) {
            case "1":
            return true;

            default:
                // No default.
            break;
        }
    break;

    default:
        // No default.
    break;
}

switch ($name2) {
    default:
        // No default.
    break;
}

switch ($foo) {
    case "1":
    return true;

    default:
        if ($foo === FALSE) {
            break(2);
        }
    break;
}

// Valid SWITCH statement.
switch ($something) {
    case '1';
        $case = '1';
    return '1';

    case '2';
    case '3';
        $case = '5';
    return '2';

    case '4';
        $case = '4';
    return '3';

    default;
        $case = null;
    return '4';
}

switch ($something) {
    case '1':
        $case = '1';
    break;

    case '2':
        throw new Exception('message');

    default:
    throw new Exception('message');
}

switch ($something) {
    case '1';
        echo 'one';
    break;

    default:
        echo 'default';
    exit;
}

switch ($foo) {
    case '1':
        return; // comment
    break;

}

// Correct Multi line breaking statement with return.
switch ($foo) {
    case 1:
    return array(
            'whiz',
            'bang',
           );

    case 2:
    return helper_func(
        'whiz',
        'bang'
    );

    default:
    throw new Exception();
}

switch ($foo) {
    case 'bar':
    throw new \Exception(
        'bar'
    );

    default:
    throw new \Exception(
        'bar'
    );
}

$foo = $foo ?
    function () {
        switch ($a) {
            case 'a':
                break;

            case (preg_match('/foo/i', $foo) ? $a : $b):
                echo 'really?'
                break;

            default:
                break;
        }
    } :
    null;

// Fix: goto should be recognized as terminating statement.
switch ( $a ) {
    case 1:
        doSomething();
        goto jumpOut;
    default:
        $other = $code;
        goto jumpOut;
}

jumpOut:
doSomething();
