Files
taskpile/frontend/node_modules/has-property-descriptors/test/index.js
Alvis f1d51b8cc8 Add side panels, task selection, graph animation, and project docs
- Foldable left panel (user profile) and right panel (task details)
- Clicking a task in the list or graph node selects it and shows details
- Both views (task list + graph) always mounted via absolute inset-0 for
  correct canvas dimensions; tabs toggle visibility with opacity
- Graph node selection animation: other nodes repel outward (charge -600),
  then selected node smoothly slides to center (500ms cubic ease-out),
  then charge restores to -120 and graph stabilizes
- Graph re-fits on tab switch and panel resize via ResizeObserver
- Fix UUID string IDs throughout (backend returns UUIDs, not integers)
- Add TaskDetailPanel, UserPanel components
- Add CLAUDE.md project documentation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 11:23:06 +00:00

58 lines
1.4 KiB
JavaScript

'use strict';
var test = require('tape');
var hasPropertyDescriptors = require('../');
var sentinel = {};
test('hasPropertyDescriptors', function (t) {
t.equal(typeof hasPropertyDescriptors, 'function', 'is a function');
t.equal(typeof hasPropertyDescriptors.hasArrayLengthDefineBug, 'function', '`hasArrayLengthDefineBug` property is a function');
var yes = hasPropertyDescriptors();
t.test('property descriptors', { skip: !yes }, function (st) {
var o = { a: sentinel };
st.deepEqual(
Object.getOwnPropertyDescriptor(o, 'a'),
{
configurable: true,
enumerable: true,
value: sentinel,
writable: true
},
'has expected property descriptor'
);
Object.defineProperty(o, 'a', { enumerable: false, writable: false });
st.deepEqual(
Object.getOwnPropertyDescriptor(o, 'a'),
{
configurable: true,
enumerable: false,
value: sentinel,
writable: false
},
'has expected property descriptor after [[Define]]'
);
st.end();
});
var arrayBug = hasPropertyDescriptors.hasArrayLengthDefineBug();
t.test('defining array lengths', { skip: !yes || arrayBug }, function (st) {
var arr = [1, , 3]; // eslint-disable-line no-sparse-arrays
st.equal(arr.length, 3, 'array starts with length 3');
Object.defineProperty(arr, 'length', { value: 5 });
st.equal(arr.length, 5, 'array ends with length 5');
st.end();
});
t.end();
});