Files
markitect-main/capabilities/testdrive-jsui/node_modules/es-abstract/2023/ApplyStringOrNumericBinaryOperator.js
tegwick 17c62aadaa 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>
2025-11-09 22:29:30 +01:00

78 lines
3.1 KiB
JavaScript

'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);
};