[ ['name' => 'valid', 'type' => 'ss', 'server' => 'example.invalid', 'port' => 443, 'cipher' => 'aes-128-gcm', 'password' => 'synthetic'], ['name' => 'bad', 'type' => 'ss', 'server' => 'example.invalid', 'port' => 443, 'cipher' => 'invalid-test-cipher', 'password' => 'synthetic'], ]]); $sources = [ ['name' => 'a', 'v2ray' => "\xEF\xBB\xBF".$uri."\nsocks://example.invalid:0#bad", 'clash' => $clash], ['name' => 'b', 'v2ray' => $uri, 'clash' => $clash], ]; $validator = new NativeValidator($sb, $mh); $result = (new Builder())->build($sources, [['code' => 'test', 'clients' => ['v2ray', 'singbox', 'clash']]], $validator); self::assertSame(['v2ray' => 1, 'clash' => 1, 'singbox' => 1], $result['report']['counts']); self::assertSame(['a', 'b'], array_values($result['report']['nodes']['uri'])[0]); self::assertCount(1, $result['report']['native_rejected']['clash']); $out = json_decode($result['files']['test/singbox'], true); self::assertSame('/a&b+c', $out['outbounds'][2]['transport']['path']); self::assertSame($result['files']['base/clash'], $result['files']['test/clash']); self::assertSame(Codec::parse($uri)['id'], Codec::parse(Codec::decode64($result['files']['test/v2ray']))['id']); } }