@@ -161,6 +161,104 @@ describe('Proxy structured producers', function () {
161161 }
162162 } ) ;
163163
164+ it ( 'keeps Mihomo Snell versions 1 through 5' , function ( ) {
165+ const proxies = [ 1 , 2 , 3 , 4 , 5 , 6 ] . map ( ( version ) => ( {
166+ type : 'snell' ,
167+ name : `Snell ${ version } ` ,
168+ server : 'snell.example.com' ,
169+ port : 44046 ,
170+ psk : 'secret' ,
171+ version,
172+ udp : true ,
173+ } ) ) ;
174+
175+ const internal = produceInternal ( 'Mihomo' , proxies ) ;
176+ const external = loadProducedYaml ( 'Mihomo' , proxies ) ;
177+
178+ expect ( internal . map ( ( proxy ) => proxy . version ) ) . to . deep . equal ( [
179+ 1 , 2 , 3 , 4 , 5 ,
180+ ] ) ;
181+ expect ( external . proxies . map ( ( proxy ) => proxy . version ) ) . to . deep . equal ( [
182+ 1 , 2 , 3 , 4 , 5 ,
183+ ] ) ;
184+ expect (
185+ internal . find ( ( proxy ) => proxy . version === 1 ) ,
186+ ) . to . not . have . property ( 'udp' ) ;
187+ expect (
188+ internal . find ( ( proxy ) => proxy . version === 2 ) ,
189+ ) . to . not . have . property ( 'udp' ) ;
190+ expect ( internal . find ( ( proxy ) => proxy . version === 4 ) . udp ) . to . equal (
191+ true ,
192+ ) ;
193+ expect ( internal . find ( ( proxy ) => proxy . version === 5 ) . udp ) . to . equal (
194+ true ,
195+ ) ;
196+ } ) ;
197+
198+ it ( 'keeps only Shadowsocks shadow-tls versions 1 through 3 for Mihomo' , function ( ) {
199+ const buildShadowTlsProxy = ( name , version ) => ( {
200+ type : 'ss' ,
201+ name,
202+ server : 'ss.example.com' ,
203+ port : 8388 ,
204+ cipher : 'aes-128-gcm' ,
205+ password : 'secret' ,
206+ 'shadow-tls-password' : 'shadow-pass' ,
207+ 'shadow-tls-sni' : 'mask.example.com' ,
208+ 'shadow-tls-version' : version ,
209+ } ) ;
210+ const proxies = [
211+ buildShadowTlsProxy ( 'ShadowTLS 1' , 1 ) ,
212+ {
213+ type : 'ss' ,
214+ name : 'ShadowTLS 2' ,
215+ server : 'ss.example.com' ,
216+ port : 8388 ,
217+ cipher : 'aes-128-gcm' ,
218+ password : 'secret' ,
219+ plugin : 'shadow-tls' ,
220+ 'plugin-opts' : {
221+ host : 'mask.example.com' ,
222+ password : 'shadow-pass' ,
223+ version : 2 ,
224+ } ,
225+ } ,
226+ buildShadowTlsProxy ( 'ShadowTLS 3' , 3 ) ,
227+ buildShadowTlsProxy ( 'ShadowTLS 4' , 4 ) ,
228+ {
229+ type : 'vmess' ,
230+ name : 'VMess ShadowTLS' ,
231+ server : 'vmess.example.com' ,
232+ port : 443 ,
233+ uuid : UUID ,
234+ cipher : 'auto' ,
235+ plugin : 'shadow-tls' ,
236+ 'plugin-opts' : {
237+ host : 'mask.example.com' ,
238+ password : 'shadow-pass' ,
239+ version : 3 ,
240+ } ,
241+ } ,
242+ ] ;
243+
244+ const internal = produceInternal ( 'Mihomo' , proxies ) ;
245+ const external = loadProducedYaml ( 'Mihomo' , proxies ) ;
246+
247+ expect ( internal . map ( ( proxy ) => proxy . name ) ) . to . deep . equal ( [
248+ 'ShadowTLS 1' ,
249+ 'ShadowTLS 2' ,
250+ 'ShadowTLS 3' ,
251+ ] ) ;
252+ expect (
253+ internal . map ( ( proxy ) => proxy [ 'plugin-opts' ] . version ) ,
254+ ) . to . deep . equal ( [ 1 , 2 , 3 ] ) ;
255+ expect ( external . proxies . map ( ( proxy ) => proxy . name ) ) . to . deep . equal ( [
256+ 'ShadowTLS 1' ,
257+ 'ShadowTLS 2' ,
258+ 'ShadowTLS 3' ,
259+ ] ) ;
260+ } ) ;
261+
164262 it ( 'keeps only supported shadowsocks v2ray-plugin modes for Shadowrocket by default' , function ( ) {
165263 const buildProxy = ( name , mode ) => ( {
166264 type : 'ss' ,
0 commit comments