11278 Commits
Author SHA1 Message Date
David RichardsonandGitHub e5f42bd403 Merge pull request #3321 from enquora/CPTimezone-modernize
Delegate CPTimezone data source to host browser
2026-09-30 11:24:02 -06:00
David Richardson ed66323b7f Merge branch 'main' into CPTimezone-modernize 2026-09-29 20:28:49 -06:00
David RichardsonandGitHub 73bae6df8e Merge pull request #3320 from cappuccino/tests-manual-orchestration-cleanup
Normalize build targets and repair global clean/clobber orchestration
2026-09-29 17:12:45 -06:00
David Richardson b8225fde2c Normalize build targets and repair global clean/clobber orchestration
The legacy dist, debug, and release Jake targets have been deprecated in favor of a unified build command, aligning the repository with standard conventions.

Node toolchain execution is sufficiently fast to generate both release and debug artifacts simultaneously within a single pass.

The symlinks within Tests/Manual/.Frameworks have been redirected to point to the unified Build artifacts rather than the obsolete dist directory.

Repository reset operations have also been corrected to ensure comprehensive artifact removal.
The root Jakefile now explicitly projects clean and clobber tasks into Tests/Manual; the clobber task now correctly removes Tests/Manual/.Frameworks along with the Frameworks directories in each subsidiary test.
2026-09-29 17:05:21 -06:00
daboe01andGitHub 1566e37943 Merge pull request #3316 from daboe01/new-platform-unload-fix
fixed: terminate on pagehide instead of unload instead of unload
2026-09-28 15:48:47 +02:00
daboe01 66cda41bfc fixed: terminate on pagehide instead of unload instead of unload 2026-09-28 15:46:35 +02:00
daboe01andGitHub e6eb14ef65 Merge pull request #3315 from daboe01/chrome-unload-pasteboard-fix
new: replace unload listener with pagehide in CPPlatformPasteboard
2026-09-28 15:15:50 +02:00
daboe01 d72619660f new: replace unload listener with pagehide in CPPlatformPasteboard 2026-09-28 15:12:55 +02:00
daboe01andGitHub 4183f090e8 Merge pull request #3314 from daboe01/fixed-textfield-blur-race-condition-on-chrome
fixed: NotFoundError race when moving the shared input element
2026-09-28 14:51:20 +02:00
daboe01 87fd68504c fixed: NotFoundError race when moving the shared input element 2026-09-28 14:47:04 +02:00
daboe01andGitHub b7fe5c3302 Merge pull request #3311 from daboe01/copypaste-fix
fixed: copy could crash when first responder did not implement isRichText
2026-09-12 15:02:38 +02:00
daboe01 55ee6de9cd fixed: copy could crash when first responder did not implement isRichText 2026-09-12 07:30:29 +02:00
David Richardson 6f1f56205e Refactor CPTimeZone to use dynamic Intl validation and host-native IANA enumeration
* Fully remove the static, hand-maintained knownTimeZoneNames array and knownTimeZoneNamesSet dictionary from +initialize.

* Implement runtime dynamic population via Intl.supportedValuesOf("timeZone") with strict fallback handling for GMT and UTC.

* Introduce a robust _isValidTimeZoneName runtime check utilizing Intl.DateTimeFormat validation to reject unrecognized zone names dynamically rather than relying on a stale static list.
 * Update initWithName: and _initWithName:abbreviation: to leverage the new engine-native validation bridge.
2026-09-11 18:53:33 -06:00
David Richardson 6adb410cc6 Fix CPDateFormatter latent defects unmasked by CPTimeZone refactoring
Transitioning to native JavaScript timezone APIs in CPTimeZone exposed latent defects in CPDateFormatter's token parsing and offset generation.

* Update CPDateFormatterTest to enforce strict UTC temporal baseline matching.
* Bypass unreliable host JavaScript local string parsing heuristics in `_dateFromTokens:dateComponents:` by implementing native `Date.UTC()` absolute timestamp construction.
* Fix GMT offset string generation for the `Z` token to correctly evaluate zero-offset timezones as positive, ensuring standard `+0000` formatting instead of `-0000`.
2026-09-11 18:38:11 -06:00
David Richardson a808c6fbab Refactor CPTimeZone to utilize native JavaScript timezone APIs
Remove the legacy, locally-bundled tzdata payload and re-implement CPTimeZone to wrap the host JavaScript engine's native timezone capabilities.
This uses fundamental properties of the host Javascript environment and is supported by browsers and Node.

* Transition offset calculations, abbreviation lookups, and DST evaluations to rely on native temporal data via underlying bridging functions (e.g., `_offsetMinutesForZone`, `_abbreviationForNameAndDate`).
* Implement synthetic fallback logic for fixed-offset abbreviations when native engines fail to produce IANA short names.
* Route localized timezone name resolution (`_localizedNameForZone`) through native formatters.
* Establish deterministic temporal baseline required by CPDateFormatter test suites.

Eliminates the maintenance burden of updating a bundled tzdata package and guarantees timezone resolution remains synchronized with the host environment.
2026-09-11 18:36:12 -06:00
David Richardson 71c2501ff6 Update CPTimeZoneTest temporal baselines
Expand test coverage for timezone parsing, offset evaluation, and GMT validation.

Establishes a strict temporal baseline and formally exposes existing logic flaws in CPTimeZone prior to applying implementation fixes.
2026-09-11 18:28:15 -06:00
David RichardsonandGitHub f56855010f Merge pull request #3310 from enquora/manual-tests-audit
Manual tests audit
2026-09-08 19:28:28 -06:00
David Richardson b80713c1e5 Remove temporary test suite migration tooling
Deletes the Python migration script and shell restoration utilities used to transition the Tests/Manual directory to the @objj/jake toolchain.

The subsidiary Jakefile migration is complete.

The scripts are removed from the active tree to prevent repository clutter, while their implementation details and exact transformation logic remain permanently verifiable in the git history.
2026-09-08 19:25:21 -06:00
David Richardson 93a1eea08b Add missing copyright and license headers 2026-09-08 19:22:50 -06:00
David Richardson 7393607a52 Add batch compile tasks to Jakefile 2026-09-08 19:21:58 -06:00
David Richardson 53784f0e10 Migrate subsidiary test Jakefiles to @objj/jake toolchain
Applies the transformation script across all applications in the Tests/Manual directory to eliminate Narwhal-era dependencies and establish compatibility with the modern Node-based runner.

* Removes explicit `require("jake")` calls in favor of the injected JAKE global.
* Replaces legacy `cappuccino/jake` application instantiation with the `CAPPUCCINO.Jake.applicationtask.app` hook.
* Substitutes archaic `system`, `file`, and `os` API calls with native Node `child_process`, `fs`, and `path` modules.
* Corrects package paths for nativehost deployment targets.
2026-09-08 19:08:43 -06:00
David Richardson 900448528a Add temporary automation scripts for test suite migration
Commit the Python migration script and the shell restoration loop used to batch-process the transition of legacy test Jakefiles to the modern Node toolchain.

These scripts provide an auditable record of the automated transformations applied to the test suite and will be removed in a subsequent commit - once the migration is complete.
2026-09-08 19:05:20 -06:00
David Richardson e04e3d9ba5 Normallize naming of ScalingTest2
All test names must use Test suffix.
2026-09-08 18:48:55 -06:00
David Richardson 5eaede0622 Refactor subsidiary Jakefile migration script for @objj/jake compatibility
Updates the transformation script to target the modern Node-based Cappuccino toolchain, removing Narwhal-era APIs from test configurations.

* Replaces legacy `require("jake")` with the implicitly injected `JAKE` global.
* Routes application task instantiation through the modern `CAPPUCCINO.Jake.applicationtask.app` hook.
* Substitutes archaic `OS`, `FILE`, and `system` module calls with native Node `fs`, `path`, and `child_process` equivalents.
* Corrects package pathing for `nativehost` references.
2026-09-08 18:45:44 -06:00
David Richardson 2c06bf566f Refactor Tests/Manual orchestration
Removes recursive JAKE.subjake calls from the root Jakefile, eliminating silent error masking and path evaluation failures during test suite compilation. Replace subjake with POSIX find.

* Replaces Node-based directory traversal with POSIX find and -execdir to guarantee correct working directory context and propagate standard output.
* Restricts the `clean` task strictly to the removal of build artifacts.
* Introduces a `clobber` task to remove Frameworks symlinks alongside build artifacts, restoring the test directories to a pristine state.
2026-09-08 18:02:47 -06:00
David Richardson 4784a1a102 Normalize application naming in ./Tests/Manual
Ensure:
* CamelCase, ending in Test
* No hyphens, spaces, underscores or other non-alpha characters

Updated application directory names.
Update Jakefiles.
2026-09-08 17:47:30 -06:00
David RichardsonandGitHub e3cb2cd6db Merge pull request #3309 from cappuccino/manual-tests-xib-cleanup
Update test application menu titles in MainMenu.xib
2026-09-03 16:41:23 -06:00
David Richardson dfe14a0f97 Update test application menu titles in MainMenu.xib
* Replace generic 'NewApplication' placeholder strings with specific product names.

* Extract target names from Jakefile and assert parity with Info.plist CPBundleName.

* Improve visual grounding during manual test suite auditing.
2026-09-03 16:31:50 -06:00
David RichardsonandGitHub aa6fce3297 Merge pull request #3308 from enquora/manual-tests-upgrade-xibs-and-cibs
Upgrade legacy XIB documents and regenerate CIB test assets
2026-09-03 14:26:59 -06:00
David Richardson 06da3164fc Upgrade legacy XIB documents and regenerate CIB test assets
* Execute batch structural upgrade of all XIB files within ./Tests/Manual to modern XML DOM format using ibtool (Xcode 26.3) to resolve imminent Xcode 27 parsing failures.

* Add regenerate-test-cibs.py script to recursively compile the modernized XIB documents into CIB artifacts within Tests/Manual/ using the local nib2cib toolchain.

* Commit the updated CIB artifacts to maintain CI and test execution parity.

*Include batch execution bash and Python scripts with LGPL-2 licensing to serve as reference migration templates for the community.
2026-09-03 14:16:53 -06:00
David RichardsonandGitHub 9cacb134c7 Merge pull request #3307 from enquora/manual-tests-navigation-viewer
Manual tests navigation viewer
2026-09-03 12:36:11 -06:00
David Richardson 17e5d32621 rename Jakefile migration script
prefix with wip- to indicate it is not yet stable.
2026-09-03 12:19:20 -06:00
David Richardson f5b305317f Improve colour scheme
Match navigation bar/masthead to https://cappuccino.dev
Highlight table row on hover
Increase visual distinction of test buttons using colour
2026-09-03 11:26:10 -06:00
David Richardson 9677609340 Improve index.html presentation
Add logotype as self-contained data URI
Improve fonts for legibility
Improve table styling
2026-09-03 10:47:29 -06:00
David Richardson ab8e47fd01 Scripts to generate and serve index HTML file for all tests
Node.js, requires no additional interpreter or dependencies.
Generates a single index.html file at root which displays launch links for all tests.
2026-09-03 09:45:37 -06:00
David Richardson a2181c88d7 Improve migrate-jakefiles.py script
Move to ./Tests/Manual
Hard-code root path to ./
Exclude sibling Jakefile
2026-09-03 09:24:53 -06:00
David Richardson 1a9ff9ffb7 Provision framework dependencies for manual integration tests
Previously, the Tests/Manual integration suite lacked an automated mechanism to provision the required Frameworks directories, leaving test applications unexecutable or reliant on stale, manually copied dependencies.

This commit introduces a Jake task to automatically provision a shared, symlinked Frameworks cache for all manual test applications, ensuring dependencies remain synchronized with the current framework build. Additionally, it adds documentation detailing the architecture and execution of the manual test suite.
2026-09-02 18:32:11 -06:00
David Richardson cc4b0e2540 Jakefile Narwhal => Node migration script, initial effort 2026-09-01 20:03:32 -06:00
David RichardsonandGitHub 87e0a6fe34 Merge pull request #3304 from cappuccino/ToolsTest-disable
Disable ToolsTest unit
2026-08-31 10:13:32 -06:00
David Richardson 45d9f10a89 Disable ToolsTest unit
Unable to modify test so that it is successful both locally and on GitHub.
Tests Node hosted tooling which is deprecated and will not receive further support.

Expedient solution is to simply disable the test.
2026-08-31 10:11:39 -06:00
David RichardsonandGitHub 93937e8b1b Merge pull request #3303 from enquora/Address-failing-array-tests
test: disable unasserted performance benchmarks in CPArray suites
2026-08-31 09:52:15 -06:00
David Richardson bdc2b7cd67 test: disable unasserted performance benchmarks in CPArray suites
Prefix unasserted performance tests with 'disabled_' in CPArrayControllerTest
and CPArrayPerformanceTest to eliminate wall-clock timing noise from standard
CI runs.

Add a dummy assertion to CPArrayPerformanceTest to maintain runner
compatibility without executing obsolete micro-benchmarks.
2026-08-31 09:49:44 -06:00
David RichardsonandGitHub b6ba250f82 Merge pull request #3301 from enquora/_CPAutocompleteMenu-fix-cold-build-warning
Fix undeclared _clientView instance variable in CPRulerView
2026-08-28 20:58:43 -06:00
David Richardson 4a5a25bb65 Fix undeclared _clientView instance variable in CPRulerView
Declare _clientView within the CPRulerView instance variable block.

This resolves a cold build compilation failure where the Objective-J parser flags assignments to the undeclared variable as illegal global variable creations.
2026-08-28 20:57:03 -06:00
David RichardsonandGitHub bc1889c7d4 Merge pull request #3300 from enquora/Update-GitHub-Actions
ci: Restrict Node.js test matrix to version 24.x
2026-08-28 20:39:02 -06:00
David Richardson 5471c38905 ci: Restrict Node.js test matrix to version 24.x
Modify GitHub Actions workflows to execute strictly against Node.js 24.x.
* Reduced the execution matrix in BuildAndTest.yml to remove deprecated and redundant runtimes (versions 20 through 23).
* Explicitly pinned the setup-node step in main-branch-publish-manual-tests.yaml to version 24.x.

This eliminates unnecessary CI resource consumption. Node 24 is the active LTS, and exhaustive version testing is no longer warranted for the legacy infrastructure given the transition to the native Go toolchain.
2026-08-28 20:36:45 -06:00
David RichardsonandGitHub 9866dd49bb Merge pull request #3299 from enquora/CPTimeZoneTest-fix
Fixes: CPTimeZoneTest, CPTimeZone, and CPDate
2026-08-28 20:01:10 -06:00
David Richardson a6969bc756 Fix CPDate string initialization to respect explicit time zone offsets
The initWithString: method previously initialized the underlying JavaScript Date object using the local-time constructor (new Date(year, month, day)).
This caused the resulting absolute time to be corrupted by the host engine's local time zone configuration, effectively ignoring the explicit time zone offset provided in the initialization string.

The implementation was a fundamental violation of the canonical contract, as established by NSDate and to be followed by CPDate.

This commit refactors the parsing logic to use Date.UTC(), guaranteeing that the parsed components are evaluated independently of the host environment.

Additionally, it eliminates a redundant RegExp allocation during pattern matching and updates the API documentation to explicitly state that offset resolution is decoupled from both CPTimeZone and the host's local time rules.
2026-08-28 19:59:11 -06:00
David Richardson 23dff002a4 Fix CPTimeZone initialization and bridge prototype exceptions
The object returned by the host engine's Intl.supportedValuesOf("timeZone") lacks standard JavaScript Array prototype methods (e.g., slice, indexOf) when crossing the runtime bridge.

This previously caused exceptions in testKnownTimeZoneNamesUsesIntlWhenAvailable.

This commit resolves the exceptions by utilizing primitive JavaScript property access and zero-indexed iteration to construct a local array. This architecture safely isolates the class from bridge prototype limitations and CPArray dependencies.

Additionally, it explicitly appends the legacy aliases "GMT" and "UTC" during the manual array construction. Engines adhering to canonical IANA identifiers omit these aliases, which caused localTimeZone initialization to abort in UTC-bound CI environments.

Guaranteeing their presence resolves the null evaluation failure in testSecondsFromGMTForDate.
2026-08-28 19:46:46 -06:00
David Richardson 03b875697e Fix CPTimeZone initialization failure in UTC environments
Intl.supportedValuesOf("timeZone") returns canonical IANA identifiers, omitting legacy aliases such as "GMT" and "UTC". This causes localTimeZone to evaluate to nil when the host engine operates in a UTC time zone, as abbreviationDictionary statically maps these aliases.

We explicitly append "GMT" and "UTC" to the dynamic knownTimeZoneNames array. This ensures invariant preservation for static dictionary lookups, guarantees successful object initialization across all UTC-bound environments, and resolves the evaluation in testSecondsFromGMTForDate on CI runners.
2026-08-28 19:22:56 -06:00