import 'package:test/test.dart';

import 'helper.dart' show check;

main() {
  test('simple switch statement', () {
    String code = '''
main() {
  int x = 2;
  switch(x) {
    case 1:
      print('spider');
      break;
    case 2:
      print('grasshopper');
      break;
  }
}''';
    return check(code);
  });

  test('switch with default', () {
    String code = '''
main() {
  int x = 5;
  switch(x) {
    case 1:
      print('spider');
      break;
    case 2:
      print('grasshopper');
      break;
    default:
      print('ladybug');

  }
}''';
    return check(code);
  });

/*
  // TODO(efortuna): Uncomment. Because of patch file weirdness, the original
  // SSA vs the Kernel version is instantiating a subclass of the
  // FallThroughError, so it produces slightly different code. Fix that.
  test('switch with fall through error', () {
    String code = '''
main() {
  int x = 2;
  switch(x) {
    case 1:
      print('spider');
      break;
    case 2:
      print('grasshopper');
    case 3:
      print('ant');
      break;
    default:
      print('ladybug');
  }
}''';
    return check(code);
  });
*/
  test('switch with multi-case branch', () {
    String code = '''
main() {
  int x = 3;
  switch(x) {
    case 1:
      print('spider');
      break;
    case 2:
    case 3:
    case 4:
      print('grasshopper');
      print('ant');
      break;
  }
}''';
    return check(code);
  });

  test('switch with weird fall-through end case', () {
    String code = '''
main() {
    int x = 6;
  switch(x) {
    case 1:
      print('spider');
      break;
    case 5:
      print('beetle');
      break;
    case 6:
  }
}''';
    return check(code);
  });

  test('switch with labeled continue', () {
    String code = '''
main() {
    int x = 1;
  switch(x) {
    case 1:
      print('spider');
      continue world;
    case 5:
      print('beetle');
      break;
    world:
    case 6:
      print('cricket');
      break;
    default:
      print('bat');
  }
}''';
    return check(code);
  });

  test('switch with continue to fall through', () {
    String code = '''
main() {
    int x = 1;
  switch(x) {
    case 1:
      print('spider');
      continue world;
    world:
    case 5:
      print('beetle');
      break;
    case 6:
      print('cricket');
      break;
    default:
      print('bat');
  }
}''';
    return check(code);
  });

  test('switch with continue without default case', () {
    String code = '''
main() {
    int x = 1;
  switch(x) {
    case 1:
      print('spider');
      continue world;
    world:
    case 5:
      print('beetle');
      break;
    case 6:
      print('cricket');
      break;
  }
}''';
    return check(code);
  });

  test('switch with continue without default case', () {
    String code = '''
main() {
    int x = 8;
  switch(x) {
    case 1:
      print('spider');
      continue world;
    world:
    case 5:
      print('beetle');
      break;
    case 6:
      print('cricket');
      break;
  }
}''';
    return check(code);
  });
}
