has.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. 'use strict';
  2. var test = require('tape');
  3. var v = require('es-value-fixtures');
  4. var traverse = require('../');
  5. test('has', function (t) {
  6. var obj = { a: 2, b: [4, 5, { c: 6 }] };
  7. t.equal(traverse(obj).has(['b', 2, 'c']), true);
  8. t.equal(traverse(obj).has(['b', 2, 'c', 0]), false);
  9. t.equal(traverse(obj).has(['b', 2, 'd']), false);
  10. t.equal(traverse(obj).has([]), true);
  11. t.equal(traverse(obj).has(['a']), true);
  12. t.equal(traverse(obj).has(['a', 2]), false);
  13. t.test('symbols', { skip: !v.hasSymbols }, function (st) {
  14. /* eslint no-restricted-properties: 1 */
  15. var globalSymbol = Symbol.for('d');
  16. var localSymbol = Symbol('e');
  17. obj[globalSymbol] = {};
  18. obj[globalSymbol][localSymbol] = 7;
  19. obj[localSymbol] = 8;
  20. st.equal(traverse(obj).has([globalSymbol]), false);
  21. st.equal(traverse(obj, { includeSymbols: true }).has([globalSymbol]), true);
  22. st.equal(traverse(obj).has([globalSymbol, globalSymbol]), false);
  23. st.equal(traverse(obj, { includeSymbols: true }).has([globalSymbol, globalSymbol]), false);
  24. st.equal(traverse(obj).has([globalSymbol, localSymbol]), false);
  25. st.equal(traverse(obj, { includeSymbols: true }).has([globalSymbol, localSymbol]), true);
  26. st.equal(traverse(obj).has([localSymbol]), false);
  27. st.equal(traverse(obj, { includeSymbols: true }).has([localSymbol]), true);
  28. st.equal(traverse(obj).has([Symbol('d')]), false);
  29. st.equal(traverse(obj, { includeSymbols: true }).has([Symbol('d')]), false);
  30. st.equal(traverse(obj).has([Symbol('e')]), false);
  31. st.equal(traverse(obj, { includeSymbols: true }).has([Symbol('e')]), false);
  32. st.equal(traverse(obj).has([Symbol.for('d')]), false);
  33. st.equal(traverse(obj, { includeSymbols: true }).has([Symbol.for('d')]), true);
  34. st.equal(traverse(obj).has([Symbol.for('e')]), false);
  35. st.equal(traverse(obj, { includeSymbols: true }).has([Symbol.for('e')]), false);
  36. st.end();
  37. });
  38. t.end();
  39. });