17fe441b2SAlex Lorenz // RUN: clang-refactor extract -selection=test:%s %s -- -std=c++11 2>&1 | grep -v CHECK | FileCheck %s
27fe441b2SAlex Lorenz 
37fe441b2SAlex Lorenz 
47fe441b2SAlex Lorenz void simpleExtractNoCaptures() {
57fe441b2SAlex Lorenz   int i = /*range=->+0:33*/1 + 2;
67fe441b2SAlex Lorenz }
77fe441b2SAlex Lorenz 
87fe441b2SAlex Lorenz // CHECK: 1 '' results:
97fe441b2SAlex Lorenz // CHECK:      static int extracted() {
107fe441b2SAlex Lorenz // CHECK-NEXT: return 1 + 2;{{$}}
117fe441b2SAlex Lorenz // CHECK-NEXT: }{{[[:space:]].*}}
127fe441b2SAlex Lorenz // CHECK-NEXT: void simpleExtractNoCaptures() {
137fe441b2SAlex Lorenz // CHECK-NEXT:   int i = /*range=->+0:33*/extracted();{{$}}
147fe441b2SAlex Lorenz // CHECK-NEXT: }
157fe441b2SAlex Lorenz 
167fe441b2SAlex Lorenz void simpleExtractStmtNoCaptures() {
177fe441b2SAlex Lorenz   /*range astatement=->+1:13*/int a = 1;
187fe441b2SAlex Lorenz   int b = 2;
197fe441b2SAlex Lorenz }
207fe441b2SAlex Lorenz // CHECK: 1 'astatement' results:
217fe441b2SAlex Lorenz // CHECK:      static void extracted() {
227fe441b2SAlex Lorenz // CHECK-NEXT: int a = 1;
23*ebbbb812SAlex Lorenz // CHECK-NEXT: int b = 2;{{$}}
247fe441b2SAlex Lorenz // CHECK-NEXT: }{{[[:space:]].*}}
257fe441b2SAlex Lorenz // CHECK-NEXT: void simpleExtractStmtNoCaptures() {
26*ebbbb812SAlex Lorenz // CHECK-NEXT:   /*range astatement=->+1:13*/extracted();{{$}}
277fe441b2SAlex Lorenz // CHECK-NEXT: }
287fe441b2SAlex Lorenz 
297fe441b2SAlex Lorenz 
307fe441b2SAlex Lorenz void blankRangeNoExtraction() {
317fe441b2SAlex Lorenz   int i = /*range blank=*/1 + 2;
327fe441b2SAlex Lorenz }
337fe441b2SAlex Lorenz 
347fe441b2SAlex Lorenz // CHECK: 1 'blank' results:
357fe441b2SAlex Lorenz // CHECK-NEXT: the provided selection does not overlap with the AST nodes of interest
367fe441b2SAlex Lorenz 
377fe441b2SAlex Lorenz int outOfBodyCodeNoExtraction = /*range out_of_body_expr=->+0:72*/1 + 2;
387fe441b2SAlex Lorenz 
397fe441b2SAlex Lorenz struct OutOfBodyStuff {
407fe441b2SAlex Lorenz   int FieldInit = /*range out_of_body_expr=->+0:58*/1 + 2;
417fe441b2SAlex Lorenz 
427fe441b2SAlex Lorenz   void foo(int x =/*range out_of_body_expr=->+0:58*/1 + 2);
437fe441b2SAlex Lorenz };
447fe441b2SAlex Lorenz 
457fe441b2SAlex Lorenz // CHECK: 3 'out_of_body_expr' results:
467fe441b2SAlex Lorenz // CHECK: the selected code is not a part of a function's / method's body
477fe441b2SAlex Lorenz 
487fe441b2SAlex Lorenz void simpleExpressionNoExtraction() {
497fe441b2SAlex Lorenz   int i = /*range simple_expr=->+0:41*/1 + /*range simple_expr=->+0:76*/(2);
507fe441b2SAlex Lorenz   (void) /*range simple_expr=->+0:40*/i;
517fe441b2SAlex Lorenz   (void)/*range simple_expr=->+0:47*/"literal";
527fe441b2SAlex Lorenz   (void)/*range simple_expr=->+0:41*/'c';
537fe441b2SAlex Lorenz }
547fe441b2SAlex Lorenz 
557fe441b2SAlex Lorenz // CHECK: 5 'simple_expr' results:
567fe441b2SAlex Lorenz // CHECK-NEXT: the selected expression is too simple to extract
57