You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					97 lines
				
				3.7 KiB
			
		
		
			
		
	
	
					97 lines
				
				3.7 KiB
			| 
											3 years ago
										 | var parseParams = require('../lib/utils').parseParams; | ||
|  | 
 | ||
|  | var path = require('path'), | ||
|  |     assert = require('assert'), | ||
|  |     inspect = require('util').inspect; | ||
|  | 
 | ||
|  | var group = path.basename(__filename, '.js') + '/'; | ||
|  | 
 | ||
|  | [ | ||
|  |   { source: 'video/ogg', | ||
|  |     expected: ['video/ogg'], | ||
|  |     what: 'No parameters' | ||
|  |   }, | ||
|  |   { source: 'video/ogg;', | ||
|  |     expected: ['video/ogg'], | ||
|  |     what: 'No parameters (with separator)' | ||
|  |   }, | ||
|  |   { source: 'video/ogg; ', | ||
|  |     expected: ['video/ogg'], | ||
|  |     what: 'No parameters (with separator followed by whitespace)' | ||
|  |   }, | ||
|  |   { source: ';video/ogg', | ||
|  |     expected: ['', 'video/ogg'], | ||
|  |     what: 'Empty parameter' | ||
|  |   }, | ||
|  |   { source: 'video/*', | ||
|  |     expected: ['video/*'], | ||
|  |     what: 'Subtype with asterisk' | ||
|  |   }, | ||
|  |   { source: 'text/plain; encoding=utf8', | ||
|  |     expected: ['text/plain', ['encoding', 'utf8']], | ||
|  |     what: 'Unquoted' | ||
|  |   }, | ||
|  |   { source: 'text/plain; encoding=', | ||
|  |     expected: ['text/plain', ['encoding', '']], | ||
|  |     what: 'Unquoted empty string' | ||
|  |   }, | ||
|  |   { source: 'text/plain; encoding="utf8"', | ||
|  |     expected: ['text/plain', ['encoding', 'utf8']], | ||
|  |     what: 'Quoted' | ||
|  |   }, | ||
|  |   { source: 'text/plain; greeting="hello \\"world\\""', | ||
|  |     expected: ['text/plain', ['greeting', 'hello "world"']], | ||
|  |     what: 'Quotes within quoted' | ||
|  |   }, | ||
|  |   { source: 'text/plain; encoding=""', | ||
|  |     expected: ['text/plain', ['encoding', '']], | ||
|  |     what: 'Quoted empty string' | ||
|  |   }, | ||
|  |   { source: 'text/plain; encoding="utf8";\t   foo=bar;test', | ||
|  |     expected: ['text/plain', ['encoding', 'utf8'], ['foo', 'bar'], 'test'], | ||
|  |     what: 'Multiple params with various spacing' | ||
|  |   }, | ||
|  |   { source: "text/plain; filename*=iso-8859-1'en'%A3%20rates", | ||
|  |     expected: ['text/plain', ['filename', '£ rates']], | ||
|  |     what: 'Extended parameter (RFC 5987) with language' | ||
|  |   }, | ||
|  |   { source: "text/plain; filename*=utf-8''%c2%a3%20and%20%e2%82%ac%20rates", | ||
|  |     expected: ['text/plain', ['filename', '£ and € rates']], | ||
|  |     what: 'Extended parameter (RFC 5987) without language' | ||
|  |   }, | ||
|  |   { source: "text/plain; filename*=utf-8''%E6%B5%8B%E8%AF%95%E6%96%87%E6%A1%A3", | ||
|  |     expected: ['text/plain', ['filename', '测试文档']], | ||
|  |     what: 'Extended parameter (RFC 5987) without language #2' | ||
|  |   }, | ||
|  |   { source: "text/plain; filename*=iso-8859-1'en'%A3%20rates; altfilename*=utf-8''%c2%a3%20and%20%e2%82%ac%20rates", | ||
|  |     expected: ['text/plain', ['filename', '£ rates'], ['altfilename', '£ and € rates']], | ||
|  |     what: 'Multiple extended parameters (RFC 5987) with mixed charsets' | ||
|  |   }, | ||
|  |   { source: "text/plain; filename*=iso-8859-1'en'%A3%20rates; altfilename=\"foobarbaz\"", | ||
|  |     expected: ['text/plain', ['filename', '£ rates'], ['altfilename', 'foobarbaz']], | ||
|  |     what: 'Mixed regular and extended parameters (RFC 5987)' | ||
|  |   }, | ||
|  |   { source: "text/plain; filename=\"foobarbaz\"; altfilename*=iso-8859-1'en'%A3%20rates", | ||
|  |     expected: ['text/plain', ['filename', 'foobarbaz'], ['altfilename', '£ rates']], | ||
|  |     what: 'Mixed regular and extended parameters (RFC 5987) #2' | ||
|  |   }, | ||
|  |   { source: 'text/plain; filename="C:\\folder\\test.png"', | ||
|  |     expected: ['text/plain', ['filename', 'C:\\folder\\test.png']], | ||
|  |     what: 'Unescaped backslashes should be considered backslashes' | ||
|  |   }, | ||
|  |   { source: 'text/plain; filename="John \\"Magic\\" Smith.png"', | ||
|  |     expected: ['text/plain', ['filename', 'John "Magic" Smith.png']], | ||
|  |     what: 'Escaped double-quotes should be considered double-quotes' | ||
|  |   }, | ||
|  |   { source: 'multipart/form-data; charset=utf-8; boundary=0xKhTmLbOuNdArY', | ||
|  |     expected: ['multipart/form-data', ['charset', 'utf-8'], ['boundary', '0xKhTmLbOuNdArY']], | ||
|  |     what: 'Multiple non-quoted parameters' | ||
|  |   }, | ||
|  | ].forEach(function(v) { | ||
|  |   var result = parseParams(v.source), | ||
|  |       msg = '[' + group + v.what + ']: parsed parameters mismatch.\n' | ||
|  |             + 'Saw: ' + inspect(result) + '\n' | ||
|  |             + 'Expected: ' + inspect(v.expected); | ||
|  |   assert.deepEqual(result, v.expected, msg); | ||
|  | }); |