types.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708
  1. /*eslint new-cap: ["error", { "capIsNew": false }]*/
  2. 'use strict';
  3. var assert = require('assert').strict;
  4. var sass = require('../');
  5. var semver = require('semver');
  6. describe('sass.types', function() {
  7. describe('Boolean', function() {
  8. it('exists', function() {
  9. assert(sass.types.Boolean);
  10. });
  11. it('names the constructor correctly', function() {
  12. assert.strictEqual(sass.types.Boolean.name, 'SassBoolean');
  13. });
  14. it('supports call constructor', function() {
  15. if(semver.gt(process.version, 'v14.5.0')) {
  16. // v8 issue tracked in https://github.com/sass/node-sass/issues/2972
  17. this.skip();
  18. }
  19. var t = sass.types.Boolean(true);
  20. assert.strictEqual(t.toString(), '[object SassBoolean]');
  21. var f = sass.types.Boolean(false);
  22. assert.strictEqual(f.toString(), '[object SassBoolean]');
  23. });
  24. it('has true and false singletons', function() {
  25. assert.strictEqual(sass.types.Boolean(true), sass.types.Boolean(true));
  26. assert.strictEqual(sass.types.Boolean(false), sass.types.Boolean(false));
  27. assert.notStrictEqual(sass.types.Boolean(false), sass.types.Boolean(true));
  28. assert.strictEqual(sass.types.Boolean(true), sass.types.Boolean.TRUE);
  29. assert.strictEqual(sass.types.Boolean(false), sass.types.Boolean.FALSE);
  30. });
  31. it('supports DOES NOT support new constructor', function() {
  32. assert.throws(function() {
  33. new sass.types.Boolean(true);
  34. }, function(error) {
  35. assert.ok(error instanceof TypeError);
  36. assert.strictEqual(error.message, 'Cannot instantiate SassBoolean');
  37. return true;
  38. });
  39. });
  40. it('throws with incorrect constructor args', function() {
  41. assert.throws(function() {
  42. sass.types.Boolean();
  43. }, function(error) {
  44. assert.ok(error instanceof TypeError);
  45. assert.strictEqual(error.message, 'Expected one boolean argument');
  46. return true;
  47. });
  48. [1, 2, '', 'hi', {}, []].forEach(function(arg) {
  49. assert.throws(function() {
  50. sass.types.Boolean(arg);
  51. }, function(error) {
  52. assert.ok(error instanceof TypeError);
  53. assert.strictEqual(error.message, 'Expected one boolean argument');
  54. return true;
  55. });
  56. });
  57. assert.throws(function() {
  58. sass.types.Boolean(true, false);
  59. }, function(error) {
  60. assert.ok(error instanceof TypeError);
  61. assert.strictEqual(error.message, 'Expected one boolean argument');
  62. return true;
  63. });
  64. });
  65. it('implements getValue', function() {
  66. var t = sass.types.Boolean(true);
  67. assert.strictEqual(typeof t.getValue, 'function');
  68. assert.strictEqual(t.getValue(), true);
  69. var f = sass.types.Boolean(false);
  70. assert.strictEqual(typeof f.getValue, 'function');
  71. assert.strictEqual(f.getValue(), false);
  72. });
  73. });
  74. describe('Color', function() {
  75. it('exists', function() {
  76. assert(sass.types.Color);
  77. });
  78. it('names the constructor correctly', function() {
  79. assert.strictEqual(sass.types.Color.name, 'SassColor');
  80. });
  81. it('supports call constructor', function() {
  82. if(semver.gt(process.version, 'v14.5.0')) {
  83. // v8 issue tracked in https://github.com/sass/node-sass/issues/2972
  84. this.skip();
  85. }
  86. var t = sass.types.Color();
  87. assert.strictEqual(t.toString(), '[object SassColor]');
  88. });
  89. it('supports new constructor', function() {
  90. if(semver.gt(process.version, 'v14.5.0')) {
  91. // v8 issue tracked in https://github.com/sass/node-sass/issues/2972
  92. this.skip();
  93. }
  94. var t = new sass.types.Color(1);
  95. assert.strictEqual(t.toString(), '[object SassColor]');
  96. });
  97. it('supports variadic constructor args', function() {
  98. var a = new sass.types.Color();
  99. assert.strictEqual(a.getR(), 0);
  100. assert.strictEqual(a.getG(), 0);
  101. assert.strictEqual(a.getB(), 0);
  102. assert.strictEqual(a.getA(), 1);
  103. var b = new sass.types.Color(1);
  104. assert.strictEqual(b.getR(), 0);
  105. assert.strictEqual(b.getG(), 0);
  106. assert.strictEqual(b.getB(), 1);
  107. assert.strictEqual(b.getA(), 0); // why ?
  108. assert.throws(function() {
  109. new sass.types.Color(1, 2);
  110. }, function(error) {
  111. // assert.ok(error instanceof TypeError);
  112. assert.strictEqual(error.message, 'Constructor should be invoked with either 0, 1, 3 or 4 arguments.');
  113. return true;
  114. });
  115. var c = new sass.types.Color(1, 2, 3);
  116. assert.strictEqual(c.getR(), 1);
  117. assert.strictEqual(c.getG(), 2);
  118. assert.strictEqual(c.getB(), 3);
  119. assert.strictEqual(c.getA(), 1);
  120. var d = new sass.types.Color(1, 2, 3, 4);
  121. assert.strictEqual(d.getR(), 1);
  122. assert.strictEqual(d.getG(), 2);
  123. assert.strictEqual(d.getB(), 3);
  124. assert.strictEqual(d.getA(), 4);
  125. assert.throws(function() {
  126. new sass.types.Color(1, 2, 3, 4, 5);
  127. }, function(error) {
  128. // assert.ok(error instanceof TypeError);
  129. assert.strictEqual(error.message, 'Constructor should be invoked with either 0, 1, 3 or 4 arguments.');
  130. return true;
  131. });
  132. });
  133. it('supports get{R,G,B,A} and set{R,G,B,A}', function() {
  134. var c = new sass.types.Color();
  135. assert.strictEqual(c.getR(), 0);
  136. assert.strictEqual(c.getG(), 0);
  137. assert.strictEqual(c.getB(), 0);
  138. assert.strictEqual(c.getA(), 1);
  139. assert.strictEqual(c.setR(1), undefined);
  140. assert.strictEqual(c.getR(), 1);
  141. assert.strictEqual(c.getG(), 0);
  142. assert.strictEqual(c.getB(), 0);
  143. assert.strictEqual(c.getA(), 1);
  144. assert.strictEqual(c.setG(1), undefined);
  145. assert.strictEqual(c.getR(), 1);
  146. assert.strictEqual(c.getG(), 1);
  147. assert.strictEqual(c.getB(), 0);
  148. assert.strictEqual(c.getA(), 1);
  149. assert.strictEqual(c.setB(1), undefined);
  150. assert.strictEqual(c.getR(), 1);
  151. assert.strictEqual(c.getG(), 1);
  152. assert.strictEqual(c.getB(), 1);
  153. assert.strictEqual(c.getA(), 1);
  154. assert.strictEqual(c.setA(0), undefined);
  155. assert.strictEqual(c.getR(), 1);
  156. assert.strictEqual(c.getG(), 1);
  157. assert.strictEqual(c.getB(), 1);
  158. assert.strictEqual(c.getA(), 0);
  159. });
  160. it('throws with incorrect set{R,G,B,A} arguments', function() {
  161. var c = new sass.types.Color();
  162. function assertJustOneArgument(cb) {
  163. assert.throws(function() {
  164. cb();
  165. }, function(error) {
  166. assert.ok(error instanceof TypeError);
  167. assert.strictEqual(error.message, 'Expected just one argument');
  168. return true;
  169. });
  170. }
  171. function assertNumberArgument(arg, cb) {
  172. assert.throws(function() {
  173. cb();
  174. }, function(error) {
  175. assert.ok(error instanceof TypeError);
  176. assert.strictEqual(error.message, 'Supplied value should be a number');
  177. return true;
  178. }, 'argument was: ' + arg);
  179. }
  180. assertJustOneArgument(function() { c.setR(); });
  181. assertJustOneArgument(function() { c.setG(); });
  182. assertJustOneArgument(function() { c.setB(); });
  183. assertJustOneArgument(function() { c.setA(); });
  184. assertJustOneArgument(function() { c.setR(1, 2); });
  185. assertJustOneArgument(function() { c.setG(1, 2); });
  186. assertJustOneArgument(function() { c.setB(1, 2); });
  187. assertJustOneArgument(function() { c.setA(1, 2); });
  188. [true, false, '0', '1', '', 'omg', {}, []].forEach(function(arg) {
  189. assertNumberArgument(arg, function() { c.setR(arg); });
  190. assertNumberArgument(arg, function() { c.setG(arg); });
  191. assertNumberArgument(arg, function() { c.setB(arg); });
  192. assertNumberArgument(arg, function() { c.setA(arg); });
  193. });
  194. });
  195. });
  196. describe('Error', function() {
  197. it('exists', function() {
  198. assert(sass.types.Error);
  199. });
  200. it('has a correctly named constructor', function() {
  201. assert.strictEqual(sass.types.Error.name, 'SassError');
  202. });
  203. it('supports call constructor', function() {
  204. if(semver.gt(process.version, 'v14.5.0')) {
  205. // v8 issue tracked in https://github.com/sass/node-sass/issues/2972
  206. this.skip();
  207. }
  208. var e = sass.types.Error('Such Error');
  209. assert.ok(e instanceof sass.types.Error);
  210. assert.strictEqual(e.toString(), '[object SassError]');
  211. // TODO: I'm not sure this object works well, it likely needs to be fleshed out more...
  212. });
  213. it('supports new constructor', function() {
  214. if(semver.gt(process.version, 'v14.5.0')) {
  215. // v8 issue tracked in https://github.com/sass/node-sass/issues/2972
  216. this.skip();
  217. }
  218. var e = new sass.types.Error('Such Error');
  219. assert.ok(e instanceof sass.types.Error);
  220. assert.strictEqual(e.toString(), '[object SassError]');
  221. // TODO: I'm not sure this object works well, it likely needs to be fleshed out more...
  222. });
  223. });
  224. describe('List', function() {
  225. it('exists', function() {
  226. assert(sass.types.List);
  227. });
  228. it('has a correctly named constructor', function() {
  229. assert.strictEqual(sass.types.List.name, 'SassList');
  230. });
  231. it('support call constructor', function() {
  232. if(semver.gt(process.version, 'v14.5.0')) {
  233. // v8 issue tracked in https://github.com/sass/node-sass/issues/2972
  234. this.skip();
  235. }
  236. var list = sass.types.List();
  237. assert.ok(list instanceof sass.types.List);
  238. assert.strictEqual(list.toString(), '[object SassList]');
  239. });
  240. it('support new constructor', function() {
  241. if(semver.gt(process.version, 'v14.5.0')) {
  242. // v8 issue tracked in https://github.com/sass/node-sass/issues/2972
  243. this.skip();
  244. }
  245. var list = new sass.types.List();
  246. assert.ok(list instanceof sass.types.List);
  247. assert.strictEqual(list.toString(), '[object SassList]');
  248. });
  249. it('support variadic constructor', function() {
  250. var a = new sass.types.List();
  251. assert.strictEqual(a.getLength(), 0);
  252. assert.strictEqual(a.getSeparator(), true);
  253. var b = new sass.types.List(1);
  254. assert.strictEqual(b.getSeparator(), true);
  255. assert.strictEqual(b.getLength(), 1);
  256. var c = new sass.types.List(1, true);
  257. assert.strictEqual(b.getLength(), 1);
  258. assert.strictEqual(c.getSeparator(), true);
  259. var d = new sass.types.List(1, false);
  260. assert.strictEqual(b.getLength(), 1);
  261. assert.strictEqual(d.getSeparator(), false);
  262. var e = new sass.types.List(1, true, 2);
  263. assert.strictEqual(b.getLength(), 1);
  264. assert.strictEqual(e.getSeparator(), true);
  265. assert.throws(function() {
  266. new sass.types.List('not-a-number');
  267. }, function(error) {
  268. // TODO: TypeError
  269. assert.strictEqual(error.message, 'First argument should be an integer.');
  270. return true;
  271. });
  272. assert.throws(function() {
  273. new sass.types.List(1, 'not-a-boolean');
  274. }, function(error) {
  275. // TODO: TypeError
  276. assert.strictEqual(error.message, 'Second argument should be a boolean.');
  277. return true;
  278. });
  279. });
  280. it('supports {get,set}Separator', function() {
  281. var a = new sass.types.List();
  282. assert.strictEqual(a.getSeparator(), true);
  283. assert.strictEqual(a.setSeparator(true), undefined);
  284. assert.strictEqual(a.getSeparator(), true);
  285. assert.strictEqual(a.setSeparator(false), undefined);
  286. assert.strictEqual(a.getSeparator(), false);
  287. assert.throws(function() {
  288. a.setSeparator();
  289. }, function(error) {
  290. assert.ok(error instanceof TypeError);
  291. assert.strictEqual(error.message, 'Expected just one argument');
  292. return true;
  293. });
  294. [1, '', [], {}].forEach(function(arg) {
  295. assert.throws(function() {
  296. a.setSeparator(arg);
  297. }, function(error) {
  298. assert.ok(error instanceof TypeError);
  299. assert.strictEqual(error.message, 'Supplied value should be a boolean');
  300. return true;
  301. }, 'setSeparator(' + arg + ')');
  302. });
  303. });
  304. it('supports setValue and getValue', function() {
  305. var a = new sass.types.List();
  306. assert.throws(function() {
  307. a.getValue();
  308. }, function(error) {
  309. assert.ok(error instanceof TypeError);
  310. assert.strictEqual(error.message, 'Expected just one argument');
  311. return true;
  312. });
  313. ['hi', [], {}].forEach(function(arg) {
  314. assert.throws(function() {
  315. a.getValue(arg);
  316. }, function(error) {
  317. assert.ok(error instanceof TypeError);
  318. assert.strictEqual(error.message, 'Supplied index should be an integer');
  319. return true;
  320. }, 'getValue(' + arg + ')');
  321. });
  322. assert.throws(function() {
  323. a.getValue(0);
  324. }, function(error) {
  325. assert.ok(error instanceof RangeError);
  326. assert.strictEqual(error.message, 'Out of bound index');
  327. return true;
  328. });
  329. assert.throws(function() {
  330. a.getValue(-1);
  331. }, function(error) {
  332. assert.ok(error instanceof RangeError);
  333. assert.strictEqual(error.message, 'Out of bound index');
  334. return true;
  335. });
  336. assert.throws(function() {
  337. a.setValue();
  338. }, function(error) {
  339. assert.ok(error instanceof TypeError);
  340. assert.strictEqual(error.message, 'Expected two arguments');
  341. return true;
  342. });
  343. assert.throws(function() {
  344. a.setValue(1);
  345. }, function(error) {
  346. assert.ok(error instanceof TypeError);
  347. assert.strictEqual(error.message, 'Expected two arguments');
  348. return true;
  349. });
  350. assert.throws(function() {
  351. a.setValue(0, 'no-a-sass-value');
  352. }, function(error) {
  353. assert.ok(error instanceof TypeError);
  354. assert.strictEqual(error.message, 'Supplied value should be a SassValue object');
  355. return true;
  356. });
  357. });
  358. // TODO: more complex set/get value scenarios
  359. });
  360. describe('Map', function() {
  361. it('exists', function() {
  362. assert(sass.types.Map);
  363. });
  364. it('has a correctly named constructor', function() {
  365. assert.strictEqual(sass.types.Map.name, 'SassMap');
  366. });
  367. it('supports call constructor', function() {
  368. if(semver.gt(process.version, 'v14.5.0')) {
  369. // v8 issue tracked in https://github.com/sass/node-sass/issues/2972
  370. this.skip();
  371. }
  372. var x = sass.types.Map();
  373. assert.strictEqual(x.toString(), '[object SassMap]');
  374. });
  375. it('supports new constructor', function() {
  376. if(semver.gt(process.version, 'v14.5.0')) {
  377. // v8 issue tracked in https://github.com/sass/node-sass/issues/2972
  378. this.skip();
  379. }
  380. var x = new sass.types.Map();
  381. assert.strictEqual(x.toString(), '[object SassMap]');
  382. });
  383. it('supports an optional constructor argument', function() {
  384. var x = new sass.types.Map();
  385. var y = new sass.types.Map(1);
  386. var z = new sass.types.Map(2, 3);
  387. assert.throws(function() {
  388. new sass.types.Map('OMG');
  389. }, function(error) {
  390. assert.strictEqual(error.message, 'First argument should be an integer.');
  391. // TODO: TypeError
  392. return true;
  393. });
  394. assert.strictEqual(x.getLength(), 0);
  395. assert.strictEqual(y.getLength(), 1);
  396. assert.strictEqual(z.getLength(), 2);
  397. });
  398. it('supports length', function() {
  399. var y = new sass.types.Map(1);
  400. var z = new sass.types.Map(2);
  401. assert.strictEqual(y.getLength(), 1);
  402. assert.strictEqual(z.getLength(), 2);
  403. });
  404. it('supports {get,set}Value {get,set}Key', function() {
  405. var y = new sass.types.Map(1);
  406. var omg = new sass.types.String('OMG');
  407. y.setValue(0, omg);
  408. console.log(y.getValue(0));
  409. });
  410. });
  411. describe('Null', function() {
  412. it('exists', function() {
  413. assert(sass.types.Null);
  414. });
  415. it('has a correctly named constructor', function() {
  416. assert.strictEqual(sass.types.Null.name, 'SassNull');
  417. });
  418. it('does not support new constructor', function() {
  419. assert.throws(function() {
  420. new sass.types.Null();
  421. }, function(error) {
  422. assert.ok(error instanceof TypeError);
  423. assert.strictEqual(error.message, 'Cannot instantiate SassNull');
  424. return true;
  425. });
  426. });
  427. it('supports call constructor (and is a singleton)', function() {
  428. assert.strictEqual(sass.types.Null(), sass.types.Null());
  429. assert.strictEqual(sass.types.Null(), sass.types.Null.NULL);
  430. });
  431. });
  432. describe('Number', function() {
  433. it('exists', function() {
  434. assert(sass.types.Number);
  435. });
  436. it('has a correctly named constructor', function() {
  437. assert.strictEqual(sass.types.Number.name, 'SassNumber');
  438. });
  439. it('supports new constructor', function() {
  440. if(semver.gt(process.version, 'v14.5.0')) {
  441. // v8 issue tracked in https://github.com/sass/node-sass/issues/2972
  442. this.skip();
  443. }
  444. var number = new sass.types.Number();
  445. assert.strictEqual(number.toString(), '[object SassNumber]');
  446. });
  447. it('supports call constructor', function() {
  448. if(semver.gt(process.version, 'v14.5.0')) {
  449. // v8 issue tracked in https://github.com/sass/node-sass/issues/2972
  450. this.skip();
  451. }
  452. var number = sass.types.Number();
  453. assert.strictEqual(number.toString(), '[object SassNumber]');
  454. });
  455. it('supports multiple constructor arguments', function() {
  456. var a = new sass.types.Number();
  457. var b = new sass.types.Number(1);
  458. var c = new sass.types.Number(2, 'px');
  459. assert.throws(function() {
  460. new sass.types.Number('OMG');
  461. }, function(error) {
  462. // TODO: TypeError
  463. assert.strictEqual(error.message, 'First argument should be a number.');
  464. return true;
  465. });
  466. assert.throws(function() {
  467. new sass.types.Number(1, 2);
  468. }, function(error) {
  469. // TODO: TypeError
  470. assert.strictEqual(error.message, 'Second argument should be a string.');
  471. return true;
  472. });
  473. assert.strictEqual(a.getValue(), 0);
  474. assert.strictEqual(a.getUnit(), '');
  475. assert.strictEqual(b.getValue(), 1);
  476. assert.strictEqual(b.getUnit(), '');
  477. assert.strictEqual(c.getValue(), 2);
  478. assert.strictEqual(c.getUnit(), 'px');
  479. });
  480. it('supports get{Unit,Value}, set{Unit,Value}', function() {
  481. var number = new sass.types.Number(1, 'px');
  482. assert.strictEqual(number.getValue(), 1);
  483. assert.strictEqual(number.getUnit(), 'px');
  484. number.setValue(2);
  485. assert.strictEqual(number.getValue(), 2);
  486. assert.strictEqual(number.getUnit(), 'px');
  487. number.setUnit('em');
  488. assert.strictEqual(number.getValue(), 2);
  489. assert.strictEqual(number.getUnit(), 'em');
  490. assert.throws(function() {
  491. number.setValue('OMG');
  492. }, function(error) {
  493. assert.ok(error instanceof TypeError);
  494. assert.strictEqual(error.message, 'Supplied value should be a number');
  495. return true;
  496. });
  497. assert.throws(function() {
  498. number.setValue();
  499. }, function(error) {
  500. assert.ok(error instanceof TypeError);
  501. assert.strictEqual(error.message, 'Expected just one argument');
  502. return true;
  503. });
  504. assert.throws(function() {
  505. number.setUnit();
  506. }, function(error) {
  507. assert.ok(error instanceof TypeError);
  508. assert.strictEqual(error.message, 'Expected just one argument');
  509. return true;
  510. });
  511. assert.throws(function() {
  512. number.setUnit(1);
  513. }, function(error) {
  514. assert.ok(error instanceof TypeError);
  515. assert.strictEqual(error.message, 'Supplied value should be a string');
  516. return true;
  517. });
  518. });
  519. });
  520. describe('String', function() {
  521. it('exists', function() {
  522. assert(sass.types.String);
  523. });
  524. it('has a properly named constructor', function() {
  525. assert.strictEqual(sass.types.String.name, 'SassString');
  526. });
  527. it('supports call constructor', function() {
  528. if(semver.gt(process.version, 'v14.5.0')) {
  529. // v8 issue tracked in https://github.com/sass/node-sass/issues/2972
  530. this.skip();
  531. }
  532. var x = sass.types.String('OMG');
  533. assert.strictEqual(x.toString(), '[object SassString]');
  534. assert.strictEqual(x.getValue(), 'OMG');
  535. });
  536. it('supports new constructor', function() {
  537. if(semver.gt(process.version, 'v14.5.0')) {
  538. // v8 issue tracked in https://github.com/sass/node-sass/issues/2972
  539. this.skip();
  540. }
  541. var x = new sass.types.String('OMG');
  542. assert.strictEqual(x.toString(), '[object SassString]');
  543. assert.strictEqual(x.getValue(), 'OMG');
  544. });
  545. it('supports multiple constructor arg combinations', function() {
  546. new sass.types.String();
  547. new sass.types.String('OMG');
  548. new sass.types.String('OMG', 'NOPE');
  549. [null, undefined, [], {}, function() { }].forEach(function(arg) {
  550. assert.throws(function() {
  551. new sass.types.String(arg);
  552. }, function(error) {
  553. // TODO: TypeError
  554. assert.strictEqual(error.message, 'Argument should be a string.');
  555. return true;
  556. });
  557. });
  558. });
  559. it('supports {get,set}Value', function() {
  560. var x = new sass.types.String();
  561. assert.strictEqual(x.getValue(), '');
  562. assert.strictEqual(x.setValue('hi'), undefined);
  563. assert.strictEqual(x.getValue(), 'hi');
  564. assert.strictEqual(x.setValue('bye'), undefined);
  565. assert.strictEqual(x.getValue(), 'bye');
  566. assert.throws(function() {
  567. x.setValue();
  568. }, function(error) {
  569. assert.ok(error instanceof TypeError);
  570. assert.strictEqual(error.message, 'Expected just one argument');
  571. return true;
  572. });
  573. assert.throws(function() {
  574. x.setValue('hi', 'hi');
  575. }, function(error) {
  576. assert.ok(error instanceof TypeError);
  577. assert.strictEqual(error.message, 'Expected just one argument');
  578. return true;
  579. });
  580. });
  581. });
  582. });