11cb0ef41Sopenharmony_ci'use strict'; 21cb0ef41Sopenharmony_ci 31cb0ef41Sopenharmony_cirequire('../common'); 41cb0ef41Sopenharmony_ciconst assert = require('assert'); 51cb0ef41Sopenharmony_ciconst { MIMEType, MIMEParams } = require('util'); 61cb0ef41Sopenharmony_ci 71cb0ef41Sopenharmony_ci 81cb0ef41Sopenharmony_ciconst WHITESPACES = '\t\n\f\r '; 91cb0ef41Sopenharmony_ciconst NOT_HTTP_TOKEN_CODE_POINT = ','; 101cb0ef41Sopenharmony_ciconst NOT_HTTP_QUOTED_STRING_CODE_POINT = '\n'; 111cb0ef41Sopenharmony_ci 121cb0ef41Sopenharmony_ciconst mime = new MIMEType('application/ecmascript; '); 131cb0ef41Sopenharmony_ciconst mime_descriptors = Object.getOwnPropertyDescriptors(mime); 141cb0ef41Sopenharmony_ciconst mime_proto = Object.getPrototypeOf(mime); 151cb0ef41Sopenharmony_ciconst mime_impersonator = Object.create(mime_proto); 161cb0ef41Sopenharmony_cifor (const key of Object.keys(mime_descriptors)) { 171cb0ef41Sopenharmony_ci const descriptor = mime_descriptors[key]; 181cb0ef41Sopenharmony_ci if (descriptor.get) { 191cb0ef41Sopenharmony_ci assert.throws(descriptor.get.call(mime_impersonator), /Invalid receiver/i); 201cb0ef41Sopenharmony_ci } 211cb0ef41Sopenharmony_ci if (descriptor.set) { 221cb0ef41Sopenharmony_ci assert.throws(descriptor.set.call(mime_impersonator, 'x'), /Invalid receiver/i); 231cb0ef41Sopenharmony_ci } 241cb0ef41Sopenharmony_ci} 251cb0ef41Sopenharmony_ci 261cb0ef41Sopenharmony_ci 271cb0ef41Sopenharmony_ciassert.strictEqual( 281cb0ef41Sopenharmony_ci JSON.stringify(mime), 291cb0ef41Sopenharmony_ci JSON.stringify('application/ecmascript')); 301cb0ef41Sopenharmony_ciassert.strictEqual(`${mime}`, 'application/ecmascript'); 311cb0ef41Sopenharmony_ciassert.strictEqual(mime.essence, 'application/ecmascript'); 321cb0ef41Sopenharmony_ciassert.strictEqual(mime.type, 'application'); 331cb0ef41Sopenharmony_ciassert.strictEqual(mime.subtype, 'ecmascript'); 341cb0ef41Sopenharmony_ciassert.ok(mime.params); 351cb0ef41Sopenharmony_ciassert.deepStrictEqual([], [...mime.params]); 361cb0ef41Sopenharmony_ciassert.strictEqual(mime.params.has('not found'), false); 371cb0ef41Sopenharmony_ciassert.strictEqual(mime.params.get('not found'), null); 381cb0ef41Sopenharmony_ciassert.strictEqual(mime.params.delete('not found'), undefined); 391cb0ef41Sopenharmony_ci 401cb0ef41Sopenharmony_ci 411cb0ef41Sopenharmony_cimime.type = 'text'; 421cb0ef41Sopenharmony_ciassert.strictEqual(mime.type, 'text'); 431cb0ef41Sopenharmony_ciassert.strictEqual(JSON.stringify(mime), JSON.stringify('text/ecmascript')); 441cb0ef41Sopenharmony_ciassert.strictEqual(`${mime}`, 'text/ecmascript'); 451cb0ef41Sopenharmony_ciassert.strictEqual(mime.essence, 'text/ecmascript'); 461cb0ef41Sopenharmony_ci 471cb0ef41Sopenharmony_ciassert.throws(() => { 481cb0ef41Sopenharmony_ci mime.type = `${WHITESPACES}text`; 491cb0ef41Sopenharmony_ci}, /ERR_INVALID_MIME_SYNTAX/); 501cb0ef41Sopenharmony_ci 511cb0ef41Sopenharmony_ciassert.throws(() => mime.type = '', /type/i); 521cb0ef41Sopenharmony_ciassert.throws(() => mime.type = '/', /type/i); 531cb0ef41Sopenharmony_ciassert.throws(() => mime.type = 'x/', /type/i); 541cb0ef41Sopenharmony_ciassert.throws(() => mime.type = '/x', /type/i); 551cb0ef41Sopenharmony_ciassert.throws(() => mime.type = NOT_HTTP_TOKEN_CODE_POINT, /type/i); 561cb0ef41Sopenharmony_ciassert.throws(() => mime.type = `${NOT_HTTP_TOKEN_CODE_POINT}/`, /type/i); 571cb0ef41Sopenharmony_ciassert.throws(() => mime.type = `/${NOT_HTTP_TOKEN_CODE_POINT}`, /type/i); 581cb0ef41Sopenharmony_ci 591cb0ef41Sopenharmony_ci 601cb0ef41Sopenharmony_cimime.subtype = 'javascript'; 611cb0ef41Sopenharmony_ciassert.strictEqual(mime.type, 'text'); 621cb0ef41Sopenharmony_ciassert.strictEqual(JSON.stringify(mime), JSON.stringify('text/javascript')); 631cb0ef41Sopenharmony_ciassert.strictEqual(`${mime}`, 'text/javascript'); 641cb0ef41Sopenharmony_ciassert.strictEqual(mime.essence, 'text/javascript'); 651cb0ef41Sopenharmony_ciassert.strictEqual(`${mime.params}`, ''); 661cb0ef41Sopenharmony_ciassert.strictEqual(`${new MIMEParams()}`, ''); 671cb0ef41Sopenharmony_ciassert.strictEqual(`${new MIMEParams(mime.params)}`, ''); 681cb0ef41Sopenharmony_ciassert.strictEqual(`${new MIMEParams(`${mime.params}`)}`, ''); 691cb0ef41Sopenharmony_ci 701cb0ef41Sopenharmony_ciassert.throws(() => { 711cb0ef41Sopenharmony_ci mime.subtype = `javascript${WHITESPACES}`; 721cb0ef41Sopenharmony_ci}, /ERR_INVALID_MIME_SYNTAX/); 731cb0ef41Sopenharmony_ci 741cb0ef41Sopenharmony_ciassert.throws(() => mime.subtype = '', /subtype/i); 751cb0ef41Sopenharmony_ciassert.throws(() => mime.subtype = ';', /subtype/i); 761cb0ef41Sopenharmony_ciassert.throws(() => mime.subtype = 'x;', /subtype/i); 771cb0ef41Sopenharmony_ciassert.throws(() => mime.subtype = ';x', /subtype/i); 781cb0ef41Sopenharmony_ciassert.throws(() => mime.subtype = NOT_HTTP_TOKEN_CODE_POINT, /subtype/i); 791cb0ef41Sopenharmony_ciassert.throws( 801cb0ef41Sopenharmony_ci () => mime.subtype = `${NOT_HTTP_TOKEN_CODE_POINT};`, 811cb0ef41Sopenharmony_ci /subtype/i); 821cb0ef41Sopenharmony_ciassert.throws( 831cb0ef41Sopenharmony_ci () => mime.subtype = `;${NOT_HTTP_TOKEN_CODE_POINT}`, 841cb0ef41Sopenharmony_ci /subtype/i); 851cb0ef41Sopenharmony_ci 861cb0ef41Sopenharmony_ci 871cb0ef41Sopenharmony_ciconst params = mime.params; 881cb0ef41Sopenharmony_ciparams.set('charset', 'utf-8'); 891cb0ef41Sopenharmony_ciassert.strictEqual(params.has('charset'), true); 901cb0ef41Sopenharmony_ciassert.strictEqual(params.get('charset'), 'utf-8'); 911cb0ef41Sopenharmony_ciassert.deepStrictEqual([...params], [['charset', 'utf-8']]); 921cb0ef41Sopenharmony_ciassert.strictEqual( 931cb0ef41Sopenharmony_ci JSON.stringify(mime), 941cb0ef41Sopenharmony_ci JSON.stringify('text/javascript;charset=utf-8')); 951cb0ef41Sopenharmony_ciassert.strictEqual(`${mime}`, 'text/javascript;charset=utf-8'); 961cb0ef41Sopenharmony_ciassert.strictEqual(mime.essence, 'text/javascript'); 971cb0ef41Sopenharmony_ciassert.strictEqual(`${mime.params}`, 'charset=utf-8'); 981cb0ef41Sopenharmony_ciassert.strictEqual(`${new MIMEParams(mime.params)}`, ''); 991cb0ef41Sopenharmony_ciassert.strictEqual(`${new MIMEParams(`${mime.params}`)}`, ''); 1001cb0ef41Sopenharmony_ci 1011cb0ef41Sopenharmony_ciparams.set('goal', 'module'); 1021cb0ef41Sopenharmony_ciassert.strictEqual(params.has('goal'), true); 1031cb0ef41Sopenharmony_ciassert.strictEqual(params.get('goal'), 'module'); 1041cb0ef41Sopenharmony_ciassert.deepStrictEqual([...params], [['charset', 'utf-8'], ['goal', 'module']]); 1051cb0ef41Sopenharmony_ciassert.strictEqual( 1061cb0ef41Sopenharmony_ci JSON.stringify(mime), 1071cb0ef41Sopenharmony_ci JSON.stringify('text/javascript;charset=utf-8;goal=module')); 1081cb0ef41Sopenharmony_ciassert.strictEqual(`${mime}`, 'text/javascript;charset=utf-8;goal=module'); 1091cb0ef41Sopenharmony_ciassert.strictEqual(mime.essence, 'text/javascript'); 1101cb0ef41Sopenharmony_ciassert.strictEqual(`${mime.params}`, 'charset=utf-8;goal=module'); 1111cb0ef41Sopenharmony_ciassert.strictEqual(`${new MIMEParams(mime.params)}`, ''); 1121cb0ef41Sopenharmony_ciassert.strictEqual(`${new MIMEParams(`${mime.params}`)}`, ''); 1131cb0ef41Sopenharmony_ci 1141cb0ef41Sopenharmony_ciassert.throws(() => { 1151cb0ef41Sopenharmony_ci params.set(`${WHITESPACES}goal`, 'module'); 1161cb0ef41Sopenharmony_ci}, /ERR_INVALID_MIME_SYNTAX/); 1171cb0ef41Sopenharmony_ci 1181cb0ef41Sopenharmony_ciparams.set('charset', 'iso-8859-1'); 1191cb0ef41Sopenharmony_ciassert.strictEqual(params.has('charset'), true); 1201cb0ef41Sopenharmony_ciassert.strictEqual(params.get('charset'), 'iso-8859-1'); 1211cb0ef41Sopenharmony_ciassert.deepStrictEqual( 1221cb0ef41Sopenharmony_ci [...params], 1231cb0ef41Sopenharmony_ci [['charset', 'iso-8859-1'], ['goal', 'module']]); 1241cb0ef41Sopenharmony_ciassert.strictEqual( 1251cb0ef41Sopenharmony_ci JSON.stringify(mime), 1261cb0ef41Sopenharmony_ci JSON.stringify('text/javascript;charset=iso-8859-1;goal=module')); 1271cb0ef41Sopenharmony_ciassert.strictEqual(`${mime}`, 'text/javascript;charset=iso-8859-1;goal=module'); 1281cb0ef41Sopenharmony_ciassert.strictEqual(mime.essence, 'text/javascript'); 1291cb0ef41Sopenharmony_ci 1301cb0ef41Sopenharmony_ciparams.delete('charset'); 1311cb0ef41Sopenharmony_ciassert.strictEqual(params.has('charset'), false); 1321cb0ef41Sopenharmony_ciassert.strictEqual(params.get('charset'), null); 1331cb0ef41Sopenharmony_ciassert.deepStrictEqual([...params], [['goal', 'module']]); 1341cb0ef41Sopenharmony_ciassert.strictEqual( 1351cb0ef41Sopenharmony_ci JSON.stringify(mime), 1361cb0ef41Sopenharmony_ci JSON.stringify('text/javascript;goal=module')); 1371cb0ef41Sopenharmony_ciassert.strictEqual(`${mime}`, 'text/javascript;goal=module'); 1381cb0ef41Sopenharmony_ciassert.strictEqual(mime.essence, 'text/javascript'); 1391cb0ef41Sopenharmony_ci 1401cb0ef41Sopenharmony_ciparams.set('x', ''); 1411cb0ef41Sopenharmony_ciassert.strictEqual(params.has('x'), true); 1421cb0ef41Sopenharmony_ciassert.strictEqual(params.get('x'), ''); 1431cb0ef41Sopenharmony_ciassert.deepStrictEqual([...params], [['goal', 'module'], ['x', '']]); 1441cb0ef41Sopenharmony_ciassert.strictEqual( 1451cb0ef41Sopenharmony_ci JSON.stringify(mime), 1461cb0ef41Sopenharmony_ci JSON.stringify('text/javascript;goal=module;x=""')); 1471cb0ef41Sopenharmony_ciassert.strictEqual(`${mime}`, 'text/javascript;goal=module;x=""'); 1481cb0ef41Sopenharmony_ciassert.strictEqual(mime.essence, 'text/javascript'); 1491cb0ef41Sopenharmony_ci 1501cb0ef41Sopenharmony_ciassert.throws(() => params.set('', 'x'), /parameter name/i); 1511cb0ef41Sopenharmony_ciassert.throws(() => params.set('=', 'x'), /parameter name/i); 1521cb0ef41Sopenharmony_ciassert.throws(() => params.set('x=', 'x'), /parameter name/i); 1531cb0ef41Sopenharmony_ciassert.throws(() => params.set('=x', 'x'), /parameter name/i); 1541cb0ef41Sopenharmony_ciassert.throws(() => params.set(`${NOT_HTTP_TOKEN_CODE_POINT}=`, 'x'), /parameter name/i); 1551cb0ef41Sopenharmony_ciassert.throws(() => params.set(`${NOT_HTTP_TOKEN_CODE_POINT}x`, 'x'), /parameter name/i); 1561cb0ef41Sopenharmony_ciassert.throws(() => params.set(`x${NOT_HTTP_TOKEN_CODE_POINT}`, 'x'), /parameter name/i); 1571cb0ef41Sopenharmony_ci 1581cb0ef41Sopenharmony_ciassert.throws(() => params.set('x', `${NOT_HTTP_QUOTED_STRING_CODE_POINT};`), /parameter value/i); 1591cb0ef41Sopenharmony_ciassert.throws(() => params.set('x', `${NOT_HTTP_QUOTED_STRING_CODE_POINT}x`), /parameter value/i); 1601cb0ef41Sopenharmony_ciassert.throws(() => params.set('x', `x${NOT_HTTP_QUOTED_STRING_CODE_POINT}`), /parameter value/i); 161