1+ // RUN: %target-run-simple-swift
2+ // REQUIRES: executable_test
3+ // REQUIRES: OS=macosx
4+ 
5+ import  Foundation
6+ import  StdlibUnittest
7+ import  SwiftSyntax
8+ 
9+ func  cannedStructDecl( )  ->  StructDeclSyntax  { 
10+   let  fooID  =  SyntaxFactory . makeIdentifier ( " Foo " ,  trailingTrivia:  . spaces( 1 ) ) 
11+   let  structKW  =  SyntaxFactory . makeStructKeyword ( trailingTrivia:  . spaces( 1 ) ) 
12+   let  rBrace  =  SyntaxFactory . makeRightBraceToken ( leadingTrivia:  . newlines( 1 ) ) 
13+   return  StructDeclSyntax  { 
14+     $0. useStructKeyword ( structKW) 
15+     $0. useIdentifier ( fooID) 
16+     $0. useLeftBrace ( SyntaxFactory . makeLeftBraceToken ( ) ) 
17+     $0. useRightBrace ( rBrace) 
18+   } 
19+ } 
20+ 
21+ var  SyntaxFactoryAPI  =  TestSuite ( " SyntaxFactoryAPI " ) 
22+ 
23+ SyntaxFactoryAPI . test ( " Generated " )  { 
24+ 
25+   let  structDecl  =  cannedStructDecl ( ) 
26+ 
27+   expectEqual ( " \( structDecl) " , 
28+               """ 
29+               struct Foo { 
30+               } 
31+                """ ) 
32+ 
33+   let  forType  =  SyntaxFactory . makeIdentifier ( " for " ,  
34+                                              leadingTrivia:  . backticks( 1 ) , 
35+                                              trailingTrivia:  [ 
36+                                                . backticks( 1 ) ,  . spaces( 1 ) 
37+                                              ] ) 
38+   let  newBrace  =  SyntaxFactory . makeRightBraceToken ( leadingTrivia:  . newlines( 2 ) ) 
39+ 
40+   let  renamed  =  structDecl. withIdentifier ( forType) 
41+                           . withRightBrace ( newBrace) 
42+ 
43+   expectEqual ( " \( renamed) " , 
44+               """ 
45+               struct `for` { 
46+ 
47+               } 
48+                """ ) 
49+ 
50+   expectNotEqual ( structDecl. leftBrace,  renamed. leftBrace) 
51+   expectEqual ( structDecl,  structDecl. root) 
52+   expectNil ( structDecl. parent) 
53+   expectNotNil ( structDecl. leftBrace. parent) 
54+   expectEqual ( structDecl. leftBrace. parent,  structDecl) 
55+ 
56+   // Ensure that accessing children via named identifiers is exactly the
57+   // same as accessing them as their underlying data.
58+   expectEqual ( structDecl. leftBrace,  structDecl. child ( at:  7 ) ) 
59+   
60+   expectEqual ( " \( structDecl. rightBrace) " , 
61+               """ 
62+ 
63+               } 
64+                """ ) 
65+ } 
66+ 
67+ SyntaxFactoryAPI . test ( " TokenSyntax " )  { 
68+   let  tok  =  SyntaxFactory . makeStructKeyword ( ) 
69+   expectEqual ( " \( tok) " ,  " struct " ) 
70+   expectTrue ( tok. isPresent) 
71+ 
72+   let  preSpacedTok  =  tok. withLeadingTrivia ( . spaces( 3 ) ) 
73+   expectEqual ( " \( preSpacedTok) " ,  "    struct " ) 
74+ 
75+   let  postSpacedTok  =  tok. withTrailingTrivia ( . spaces( 6 ) ) 
76+   expectEqual ( " \( postSpacedTok) " ,  " struct       " ) 
77+ 
78+   let  prePostSpacedTok  =  preSpacedTok. withTrailingTrivia ( . spaces( 4 ) ) 
79+   expectEqual ( " \( prePostSpacedTok) " ,  "    struct     " ) 
80+ } 
81+ 
82+ SyntaxFactoryAPI . test ( " FunctionCallSyntaxBuilder " )  { 
83+   let  string  =  SyntaxFactory . makeStringLiteralExpr ( " Hello, world! " ) 
84+   let  printID  =  SyntaxFactory . makeVariableExpr ( " print " ) 
85+   let  arg  =  FunctionCallArgumentSyntax  { 
86+     $0. useExpression ( string) 
87+   } 
88+   let  call  =  FunctionCallExprSyntax  { 
89+     $0. useCalledExpression ( printID) 
90+     $0. useLeftParen ( SyntaxFactory . makeLeftParenToken ( ) ) 
91+     $0. addFunctionCallArgument ( arg) 
92+     $0. useRightParen ( SyntaxFactory . makeRightParenToken ( ) ) 
93+   } 
94+   expectEqual ( " \( call) " ,  " print( \" Hello, world! \" ) " ) 
95+ 
96+   let  terminatorArg  =  FunctionCallArgumentSyntax  { 
97+     $0. useLabel ( SyntaxFactory . makeIdentifier ( " terminator " ) ) 
98+     $0. useColon ( SyntaxFactory . makeColonToken ( trailingTrivia:  . spaces( 1 ) ) ) 
99+     $0. useExpression ( SyntaxFactory . makeStringLiteralExpr ( "   " ) ) 
100+   } 
101+   let  callWithTerminator  =  call. withArgumentList ( 
102+     SyntaxFactory . makeFunctionCallArgumentList ( [ 
103+       arg. withTrailingComma ( 
104+         SyntaxFactory . makeCommaToken ( trailingTrivia:  . spaces( 1 ) ) ) , 
105+       terminatorArg
106+     ] ) 
107+   ) 
108+ 
109+   expectEqual ( " \( callWithTerminator) " , 
110+               " print( \" Hello, world! \" , terminator:  \"   \" ) " ) 
111+ } 
112+ 
113+ runAllTests ( ) 
0 commit comments