toStringTag.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. 'use strict';
  2. var test = require('tape');
  3. var hasToStringTag = require('has-tostringtag/shams')();
  4. var inspect = require('../');
  5. test('Symbol.toStringTag', { skip: !hasToStringTag }, function (t) {
  6. t.plan(4);
  7. var obj = { a: 1 };
  8. t.equal(inspect(obj), '{ a: 1 }', 'object, no Symbol.toStringTag');
  9. obj[Symbol.toStringTag] = 'foo';
  10. t.equal(inspect(obj), '{ a: 1, [Symbol(Symbol.toStringTag)]: \'foo\' }', 'object with Symbol.toStringTag');
  11. t.test('null objects', { skip: 'toString' in { __proto__: null } }, function (st) {
  12. st.plan(2);
  13. var dict = { __proto__: null, a: 1 };
  14. st.equal(inspect(dict), '[Object: null prototype] { a: 1 }', 'null object with Symbol.toStringTag');
  15. dict[Symbol.toStringTag] = 'Dict';
  16. st.equal(inspect(dict), '[Dict: null prototype] { a: 1, [Symbol(Symbol.toStringTag)]: \'Dict\' }', 'null object with Symbol.toStringTag');
  17. });
  18. t.test('instances', function (st) {
  19. st.plan(4);
  20. function C() {
  21. this.a = 1;
  22. }
  23. st.equal(Object.prototype.toString.call(new C()), '[object Object]', 'instance, no toStringTag, Object.prototype.toString');
  24. st.equal(inspect(new C()), 'C { a: 1 }', 'instance, no toStringTag');
  25. C.prototype[Symbol.toStringTag] = 'Class!';
  26. st.equal(Object.prototype.toString.call(new C()), '[object Class!]', 'instance, with toStringTag, Object.prototype.toString');
  27. st.equal(inspect(new C()), 'C [Class!] { a: 1 }', 'instance, with toStringTag');
  28. });
  29. });