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