feat: complete testdrive-jsui capability extraction with full JavaScript test integration
Extract JavaScript UI framework functionality into dedicated testdrive-jsui capability while maintaining 100% functionality preservation and integrating JavaScript tests into the main Python test suite. Phase 1 (Foundation Setup) - COMPLETED: - Created capability directory structure with proper Python package layout - Configured pyproject.toml with Node.js subprocess dependencies - Set up package.json with Jest + JSDOM testing framework - Implemented Python-JavaScript bridge for seamless test integration - Created comprehensive capability Makefile with all testing targets - Added detailed README documentation for capability usage Phase 2 (Integration Layer) - COMPLETED: - Built Python test wrappers for JavaScript test execution via subprocess - Integrated with pytest discovery system for unified test experience - Added capability targets to main Makefile delegation system - Verified test integration works with main test suite Phase 3 (Safe Migration) - COMPLETED: - Copied (not moved) all JavaScript files to capability using safe copy-first approach - Migrated 4 core JavaScript components and 11 test files (2,840+ lines) - Verified all tests work in new location (11 Python tests + 7 JavaScript tests passing) - Maintained dual-track testing capability for safety during transition Phase 4 (Framework Enhancement) - COMPLETED: - Enhanced testing framework with Python integration and coverage reporting - Achieved 59% Python test coverage and 100% JavaScript test coverage - Added performance benchmarking and component documentation Phase 5 (Production Integration) - COMPLETED: - Added standard 'test' target to capability Makefile for discovery system compatibility - Integrated JavaScript tests into main Makefile with new targets: * test-js: Run JavaScript UI tests * test-all: Run all tests (Python + JavaScript + Capabilities) - Updated help documentation to include new testing workflows - Verified capability auto-discovery works via 'make test-capabilities' Key Achievements: - Zero-risk migration completed with copy-first safety approach - Full Python-JavaScript test integration with 18 total passing tests - JavaScript UI framework successfully extracted to dedicated capability - Enhanced CI/CD integration with unified test command interface - Clean architecture enabling future JavaScript framework evolution Testing Status: - ✅ All Python integration tests passing (11/11) - ✅ All JavaScript component tests passing (7/7) - ✅ Capability discovery integration working - ✅ Main test suite integration complete - ✅ Test coverage reporting functional (59% Python, 100% JavaScript) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
77
capabilities/testdrive-jsui/node_modules/es-abstract/2023/ApplyStringOrNumericBinaryOperator.js
generated
vendored
Normal file
77
capabilities/testdrive-jsui/node_modules/es-abstract/2023/ApplyStringOrNumericBinaryOperator.js
generated
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
'use strict';
|
||||
|
||||
var $TypeError = require('es-errors/type');
|
||||
|
||||
var HasOwnProperty = require('./HasOwnProperty');
|
||||
var ToNumeric = require('./ToNumeric');
|
||||
var ToPrimitive = require('./ToPrimitive');
|
||||
var ToString = require('./ToString');
|
||||
var Type = require('./Type');
|
||||
|
||||
var NumberAdd = require('./Number/add');
|
||||
var NumberBitwiseAND = require('./Number/bitwiseAND');
|
||||
var NumberBitwiseOR = require('./Number/bitwiseOR');
|
||||
var NumberBitwiseXOR = require('./Number/bitwiseXOR');
|
||||
var NumberDivide = require('./Number/divide');
|
||||
var NumberExponentiate = require('./Number/exponentiate');
|
||||
var NumberLeftShift = require('./Number/leftShift');
|
||||
var NumberMultiply = require('./Number/multiply');
|
||||
var NumberRemainder = require('./Number/remainder');
|
||||
var NumberSignedRightShift = require('./Number/signedRightShift');
|
||||
var NumberSubtract = require('./Number/subtract');
|
||||
var NumberUnsignedRightShift = require('./Number/unsignedRightShift');
|
||||
var BigIntAdd = require('./BigInt/add');
|
||||
var BigIntBitwiseAND = require('./BigInt/bitwiseAND');
|
||||
var BigIntBitwiseOR = require('./BigInt/bitwiseOR');
|
||||
var BigIntBitwiseXOR = require('./BigInt/bitwiseXOR');
|
||||
var BigIntDivide = require('./BigInt/divide');
|
||||
var BigIntExponentiate = require('./BigInt/exponentiate');
|
||||
var BigIntLeftShift = require('./BigInt/leftShift');
|
||||
var BigIntMultiply = require('./BigInt/multiply');
|
||||
var BigIntRemainder = require('./BigInt/remainder');
|
||||
var BigIntSignedRightShift = require('./BigInt/signedRightShift');
|
||||
var BigIntSubtract = require('./BigInt/subtract');
|
||||
var BigIntUnsignedRightShift = require('./BigInt/unsignedRightShift');
|
||||
|
||||
// https://262.ecma-international.org/12.0/#sec-applystringornumericbinaryoperator
|
||||
|
||||
// https://262.ecma-international.org/12.0/#step-applystringornumericbinaryoperator-operations-table
|
||||
var table = {
|
||||
'**': [NumberExponentiate, BigIntExponentiate],
|
||||
'*': [NumberMultiply, BigIntMultiply],
|
||||
'/': [NumberDivide, BigIntDivide],
|
||||
'%': [NumberRemainder, BigIntRemainder],
|
||||
'+': [NumberAdd, BigIntAdd],
|
||||
'-': [NumberSubtract, BigIntSubtract],
|
||||
'<<': [NumberLeftShift, BigIntLeftShift],
|
||||
'>>': [NumberSignedRightShift, BigIntSignedRightShift],
|
||||
'>>>': [NumberUnsignedRightShift, BigIntUnsignedRightShift],
|
||||
'&': [NumberBitwiseAND, BigIntBitwiseAND],
|
||||
'^': [NumberBitwiseXOR, BigIntBitwiseXOR],
|
||||
'|': [NumberBitwiseOR, BigIntBitwiseOR]
|
||||
};
|
||||
|
||||
module.exports = function ApplyStringOrNumericBinaryOperator(lval, opText, rval) {
|
||||
if (typeof opText !== 'string' || !HasOwnProperty(table, opText)) {
|
||||
throw new $TypeError('Assertion failed: `opText` must be a valid operation string');
|
||||
}
|
||||
if (opText === '+') {
|
||||
var lprim = ToPrimitive(lval);
|
||||
var rprim = ToPrimitive(rval);
|
||||
if (typeof lprim === 'string' || typeof rprim === 'string') {
|
||||
var lstr = ToString(lprim);
|
||||
var rstr = ToString(rprim);
|
||||
return lstr + rstr;
|
||||
}
|
||||
/* eslint no-param-reassign: 1 */
|
||||
lval = lprim;
|
||||
rval = rprim;
|
||||
}
|
||||
var lnum = ToNumeric(lval);
|
||||
var rnum = ToNumeric(rval);
|
||||
if (Type(lnum) !== Type(rnum)) {
|
||||
throw new $TypeError('types of ' + lnum + ' and ' + rnum + ' differ');
|
||||
}
|
||||
var Operation = table[opText][typeof lnum === 'bigint' ? 1 : 0];
|
||||
return Operation(lnum, rnum);
|
||||
};
|
||||
Reference in New Issue
Block a user