1*7fe441b2SAlex Lorenz // RUN: clang-refactor extract -selection=test:%s %s -- -std=c++11 2>&1 | grep -v CHECK | FileCheck %s
2*7fe441b2SAlex Lorenz 
3*7fe441b2SAlex Lorenz 
4*7fe441b2SAlex Lorenz void simpleExtractNoCaptures() {
5*7fe441b2SAlex Lorenz   int i = /*range=->+0:33*/1 + 2;
6*7fe441b2SAlex Lorenz }
7*7fe441b2SAlex Lorenz 
8*7fe441b2SAlex Lorenz // CHECK: 1 '' results:
9*7fe441b2SAlex Lorenz // CHECK:      static int extracted() {
10*7fe441b2SAlex Lorenz // CHECK-NEXT: return 1 + 2;{{$}}
11*7fe441b2SAlex Lorenz // CHECK-NEXT: }{{[[:space:]].*}}
12*7fe441b2SAlex Lorenz // CHECK-NEXT: void simpleExtractNoCaptures() {
13*7fe441b2SAlex Lorenz // CHECK-NEXT:   int i = /*range=->+0:33*/extracted();{{$}}
14*7fe441b2SAlex Lorenz // CHECK-NEXT: }
15*7fe441b2SAlex Lorenz 
16*7fe441b2SAlex Lorenz void simpleExtractStmtNoCaptures() {
17*7fe441b2SAlex Lorenz   /*range astatement=->+1:13*/int a = 1;
18*7fe441b2SAlex Lorenz   int b = 2;
19*7fe441b2SAlex Lorenz }
20*7fe441b2SAlex Lorenz // CHECK: 1 'astatement' results:
21*7fe441b2SAlex Lorenz // CHECK:      static void extracted() {
22*7fe441b2SAlex Lorenz // CHECK-NEXT: int a = 1;
23*7fe441b2SAlex Lorenz // CHECK-NEXT: int b = 2;;{{$}}
24*7fe441b2SAlex Lorenz // CHECK-NEXT: }{{[[:space:]].*}}
25*7fe441b2SAlex Lorenz // CHECK-NEXT: void simpleExtractStmtNoCaptures() {
26*7fe441b2SAlex Lorenz // CHECK-NEXT:   /*range astatement=->+1:13*/extracted(){{$}}
27*7fe441b2SAlex Lorenz // CHECK-NEXT: }
28*7fe441b2SAlex Lorenz 
29*7fe441b2SAlex Lorenz 
30*7fe441b2SAlex Lorenz void blankRangeNoExtraction() {
31*7fe441b2SAlex Lorenz   int i = /*range blank=*/1 + 2;
32*7fe441b2SAlex Lorenz }
33*7fe441b2SAlex Lorenz 
34*7fe441b2SAlex Lorenz // CHECK: 1 'blank' results:
35*7fe441b2SAlex Lorenz // CHECK-NEXT: the provided selection does not overlap with the AST nodes of interest
36*7fe441b2SAlex Lorenz 
37*7fe441b2SAlex Lorenz int outOfBodyCodeNoExtraction = /*range out_of_body_expr=->+0:72*/1 + 2;
38*7fe441b2SAlex Lorenz 
39*7fe441b2SAlex Lorenz struct OutOfBodyStuff {
40*7fe441b2SAlex Lorenz   int FieldInit = /*range out_of_body_expr=->+0:58*/1 + 2;
41*7fe441b2SAlex Lorenz 
42*7fe441b2SAlex Lorenz   void foo(int x =/*range out_of_body_expr=->+0:58*/1 + 2);
43*7fe441b2SAlex Lorenz };
44*7fe441b2SAlex Lorenz 
45*7fe441b2SAlex Lorenz // CHECK: 3 'out_of_body_expr' results:
46*7fe441b2SAlex Lorenz // CHECK: the selected code is not a part of a function's / method's body
47*7fe441b2SAlex Lorenz 
48*7fe441b2SAlex Lorenz void simpleExpressionNoExtraction() {
49*7fe441b2SAlex Lorenz   int i = /*range simple_expr=->+0:41*/1 + /*range simple_expr=->+0:76*/(2);
50*7fe441b2SAlex Lorenz   (void) /*range simple_expr=->+0:40*/i;
51*7fe441b2SAlex Lorenz   (void)/*range simple_expr=->+0:47*/"literal";
52*7fe441b2SAlex Lorenz   (void)/*range simple_expr=->+0:41*/'c';
53*7fe441b2SAlex Lorenz }
54*7fe441b2SAlex Lorenz 
55*7fe441b2SAlex Lorenz // CHECK: 5 'simple_expr' results:
56*7fe441b2SAlex Lorenz // CHECK-NEXT: the selected expression is too simple to extract
57