@@ -79,4 +79,137 @@ def code() "200" end
7979 assert_equal %(pin "react", preload: "foo" # @17.0.2) , @packager . vendored_pin_for ( "react" , "https://cdn/[email protected] " , [ "foo" ] ) 8080 assert_equal %(pin "react", preload: ["foo", "bar"] # @17.0.2) , @packager . vendored_pin_for ( "react" , "https://cdn/[email protected] " , [ "foo" , "bar" ] ) 8181 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
82215end
0 commit comments