@@ -14,6 +14,10 @@ func TestProcessRuntimes(t *testing.T) {
1414 Name : "node" ,
1515 Version : "18.17.1" ,
1616 },
17+ {
18+ Name : "flutter" ,
19+ Version : "3.35.7" ,
20+ },
1721 }
1822
1923 // Define a test runtime directory
@@ -27,9 +31,15 @@ func TestProcessRuntimes(t *testing.T) {
2731
2832 // Assert we have the expected runtime in the results
2933 assert .Contains (t , runtimeInfos , "node" )
34+ assert .Contains (t , runtimeInfos , "flutter" )
3035
3136 // Get the node runtime info
3237 nodeInfo := runtimeInfos ["node" ]
38+ flutterInfo := runtimeInfos ["flutter" ]
39+
40+ // Basic assertions for flutter
41+ assert .Equal (t , "flutter" , flutterInfo .Name )
42+ assert .Equal (t , "3.35.7" , flutterInfo .Version )
3343
3444 // Assert the basic runtime info is correct
3545 assert .Equal (t , "node" , nodeInfo .Name )
@@ -56,6 +66,73 @@ func TestProcessRuntimes(t *testing.T) {
5666 expectedExtension = "zip"
5767 }
5868
69+ flutterExpectedExtension := "zip"
70+ if runtime .GOOS == "linux" {
71+ flutterExpectedExtension = "tar.xz"
72+ }
73+
74+ // Assert flutter extension
75+ assert .Equal (t , flutterExpectedExtension , flutterInfo .Extension )
76+
77+ // Additional flutter assertions
78+ // Assert the filename is correctly set to a constant "flutter"
79+ assert .Equal (t , "flutter" , flutterInfo .FileName )
80+
81+ // Assert the install directory is correct for flutter
82+ assert .Equal (t , runtimesDir + "/" + flutterInfo .FileName , flutterInfo .InstallDir )
83+
84+ // Compute expected OS mapping for flutter download URL
85+ var expectedFlutterOS string
86+ switch runtime .GOOS {
87+ case "darwin" :
88+ expectedFlutterOS = "macos"
89+ case "linux" :
90+ expectedFlutterOS = "linux"
91+ case "windows" :
92+ expectedFlutterOS = "windows"
93+ default :
94+ expectedFlutterOS = runtime .GOOS
95+ }
96+
97+ // Compute expected arch for flutter (only used on macOS/default template)
98+ var expectedFlutterArch string
99+ switch runtime .GOARCH {
100+ case "386" :
101+ expectedFlutterArch = "ia32"
102+ case "amd64" :
103+ expectedFlutterArch = "x64"
104+ case "arm" :
105+ expectedFlutterArch = "arm"
106+ case "arm64" :
107+ expectedFlutterArch = "arm64"
108+ default :
109+ expectedFlutterArch = runtime .GOARCH
110+ }
111+
112+ // Build expected flutter download URL
113+ var expectedFlutterURL string
114+ if runtime .GOOS == "linux" {
115+ expectedFlutterURL = "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_" + flutterInfo .Version + "-stable." + flutterExpectedExtension
116+ } else if runtime .GOOS == "windows" {
117+ expectedFlutterURL = "https://storage.googleapis.com/flutter_infra_release/releases/stable/windows/flutter_windows_" + flutterInfo .Version + "-stable." + flutterExpectedExtension
118+ } else {
119+ // Default template includes arch and mapped OS (e.g., macos)
120+ expectedFlutterURL = "https://storage.googleapis.com/flutter_infra_release/releases/stable/" + expectedFlutterOS + "/flutter_" + expectedFlutterOS + "_" + expectedFlutterArch + "_" + flutterInfo .Version + "-stable." + flutterExpectedExtension
121+ }
122+
123+ assert .Equal (t , expectedFlutterURL , flutterInfo .DownloadURL )
124+
125+ // Assert flutter binaries map has expected entries
126+ assert .NotNil (t , flutterInfo .Binaries )
127+ assert .Greater (t , len (flutterInfo .Binaries ), 0 )
128+
129+ // Check if dart binary is present and correctly mapped
130+ flutterDartBinary := flutterInfo .InstallDir + "/bin/dart"
131+ if runtime .GOOS == "windows" {
132+ flutterDartBinary += ".exe"
133+ }
134+ assert .Equal (t , flutterDartBinary , flutterInfo .Binaries ["dart" ])
135+
59136 // Assert the filename is correctly formatted
60137 expectedFileName := "node-v18.17.1-" + runtime .GOOS + "-" + expectedArch
61138 assert .Equal (t , expectedFileName , nodeInfo .FileName )
@@ -69,21 +146,21 @@ func TestProcessRuntimes(t *testing.T) {
69146 // Assert the download URL is correctly formatted
70147 expectedDownloadURL := "https://nodejs.org/dist/v18.17.1/" + expectedFileName + "." + expectedExtension
71148 assert .Equal (t , expectedDownloadURL , nodeInfo .DownloadURL )
72-
149+
73150 // Assert binary paths are correctly set
74151 assert .NotNil (t , nodeInfo .Binaries )
75152 assert .Greater (t , len (nodeInfo .Binaries ), 0 )
76-
153+
77154 // Check if node and npm binaries are present
78155 nodeBinary := nodeInfo .InstallDir + "/bin/node"
79156 npmBinary := nodeInfo .InstallDir + "/bin/npm"
80-
157+
81158 // Add .exe extension for Windows
82159 if runtime .GOOS == "windows" {
83160 nodeBinary += ".exe"
84161 npmBinary += ".exe"
85162 }
86-
163+
87164 assert .Equal (t , nodeBinary , nodeInfo .Binaries ["node" ])
88165 assert .Equal (t , npmBinary , nodeInfo .Binaries ["npm" ])
89166}
0 commit comments