@@ -79,4 +79,137 @@ def code() "200" end
79
79
assert_equal %(pin "react", preload: "foo" # @17.0.2) , @packager . vendored_pin_for ( "react" , "https://cdn/[email protected] " , [ "foo" ] )
80
80
assert_equal %(pin "react", preload: ["foo", "bar"] # @17.0.2) , @packager . vendored_pin_for ( "react" , "https://cdn/[email protected] " , [ "foo" , "bar" ] )
81
81
end
82
+
83
+ test "extract_existing_pin_options with preload false" do
84
+ temp_importmap = create_temp_importmap ( 'pin "package1", preload: false' )
85
+ packager = Importmap ::Packager . new ( temp_importmap )
86
+
87
+ options = extract_options_for_package ( packager , "package1" )
88
+
89
+ assert_equal ( { preload : false } , options )
90
+ end
91
+
92
+ test "extract_existing_pin_options with preload true" do
93
+ temp_importmap = create_temp_importmap ( 'pin "package1", preload: true' )
94
+ packager = Importmap ::Packager . new ( temp_importmap )
95
+
96
+ options = extract_options_for_package ( packager , "package1" )
97
+
98
+ assert_equal ( { preload : true } , options )
99
+ end
100
+
101
+ test "extract_existing_pin_options with custom preload string" do
102
+ temp_importmap = create_temp_importmap ( 'pin "package1", preload: "custom"' )
103
+ packager = Importmap ::Packager . new ( temp_importmap )
104
+
105
+ options = extract_options_for_package ( packager , "package1" )
106
+
107
+ assert_equal ( { preload : "custom" } , options )
108
+ end
109
+
110
+ test "extract_existing_pin_options with custom preload array" do
111
+ temp_importmap = create_temp_importmap ( 'pin "package1", preload: ["custom1", "custom2"]' )
112
+ packager = Importmap ::Packager . new ( temp_importmap )
113
+
114
+ options = extract_options_for_package ( packager , "package1" )
115
+
116
+ assert_equal ( { preload : [ "custom1" , "custom2" ] } , options )
117
+ end
118
+
119
+ test "extract_existing_pin_options with to option only" do
120
+ temp_importmap = create_temp_importmap ( 'pin "package1", to: "custom_path.js"' )
121
+ packager = Importmap ::Packager . new ( temp_importmap )
122
+
123
+ options = extract_options_for_package ( packager , "package1" )
124
+
125
+ assert_equal ( { } , options )
126
+ end
127
+
128
+ test "extract_existing_pin_options with integrity option only" do
129
+ temp_importmap = create_temp_importmap ( 'pin "package1", integrity: "sha384-abcdef1234567890"' )
130
+ packager = Importmap ::Packager . new ( temp_importmap )
131
+
132
+ options = extract_options_for_package ( packager , "package1" )
133
+
134
+ assert_equal ( { } , options )
135
+ end
136
+
137
+ test "extract_existing_pin_options with multiple options" do
138
+ temp_importmap = create_temp_importmap ( 'pin "package1", to: "path.js", preload: false, integrity: "sha384-abcdef1234567890"' )
139
+ packager = Importmap ::Packager . new ( temp_importmap )
140
+
141
+ options = extract_options_for_package ( packager , "package1" )
142
+
143
+ assert_equal ( { preload : false } , options )
144
+ end
145
+
146
+ test "extract_existing_pin_options with version comment" do
147
+ temp_importmap = create_temp_importmap ( 'pin "package1", preload: false # @2.0.0' )
148
+ packager = Importmap ::Packager . new ( temp_importmap )
149
+
150
+ options = extract_options_for_package ( packager , "package1" )
151
+
152
+ assert_equal ( { preload : false } , options )
153
+ end
154
+
155
+ test "extract_existing_pin_options with no options" do
156
+ temp_importmap = create_temp_importmap ( 'pin "package1"' )
157
+ packager = Importmap ::Packager . new ( temp_importmap )
158
+
159
+ options = extract_options_for_package ( packager , "package1" )
160
+
161
+ assert_equal ( { } , options )
162
+ end
163
+
164
+ test "extract_existing_pin_options with nonexistent package" do
165
+ temp_importmap = create_temp_importmap ( 'pin "package1", preload: false' )
166
+ packager = Importmap ::Packager . new ( temp_importmap )
167
+
168
+ options = extract_options_for_package ( packager , "nonexistent" )
169
+
170
+ assert_equal ( { } , options )
171
+ end
172
+
173
+ test "extract_existing_pin_options with nonexistent file" do
174
+ packager = Importmap ::Packager . new ( "/nonexistent/path" )
175
+
176
+ options = extract_options_for_package ( packager , "package1" )
177
+
178
+ assert_nil options
179
+ end
180
+
181
+ test "extract_existing_pin_options handles multiple packages in one call" do
182
+ temp_importmap = create_temp_importmap ( <<~PINS )
183
+ pin "package1", preload: false
184
+ pin "package2", preload: true
185
+ pin "package3", preload: "custom"
186
+ pin "package4" # no options
187
+ PINS
188
+
189
+ packager = Importmap ::Packager . new ( temp_importmap )
190
+
191
+ result = packager . extract_existing_pin_options ( [ "package1" , "package2" , "package3" , "package4" , "nonexistent" ] )
192
+
193
+ assert_equal ( {
194
+ "package1" => { preload : false } ,
195
+ "package2" => { preload : true } ,
196
+ "package3" => { preload : "custom" } ,
197
+ "package4" => { } ,
198
+ "nonexistent" => { }
199
+ } , result )
200
+ end
201
+
202
+ private
203
+
204
+ def create_temp_importmap ( content )
205
+ temp_file = Tempfile . new ( [ 'importmap' , '.rb' ] )
206
+ temp_file . write ( content )
207
+ temp_file . close
208
+ temp_file . path
209
+ end
210
+
211
+ def extract_options_for_package ( packager , package_name )
212
+ result = packager . extract_existing_pin_options ( package_name )
213
+ result [ package_name ]
214
+ end
82
215
end
0 commit comments