ladybird/Libraries
ayeteadoe 744fd91d0b LibTest: Support death tests without child process cloning
A challenge for getting LibTest working on Windows has always
been CrashTest. It implements death tests similar to Google Test
where a child process is cloned to invoke the expression that
should abort/terminate the program. Then the exit code of the
child is used by the parent test process to verify if the
application correctly aborted/terminated due to invoking
the expression.

The problem was that finding an equivalent way to port Crash::run()
to Windows was not looking very likely as publicly exposed Win32/
Native APIs have no equivalent to fork(); however, Windows actually
does have native support for process cloning via undocumented NT
APIs that clever people reverse engineered and published, see
`NtCreateUserProcess()`.

All that being said, this `EXPECT_DEATH()` implementation avoids
needing to use a child process in general, allowing us to remove
CrashTest in favour of a single cross-platform solution for death
tests.
2025-05-16 13:23:32 -06:00
..
LibCompress LibCompress: Refactor deflate de/compressor using zlib 2025-03-19 13:46:50 +01:00
LibCore LibCore: Remove LADYBIRD_GIT_VERSION environment variable usage 2025-05-15 14:02:48 +02:00
LibCrypto LibJS/LibCrypto: Cleanup JS Math random() RNG 2025-05-15 07:41:02 -06:00
LibDevTools LibDevTools+LibWebView+WebContent: Report exceptions to DevTools 2025-03-27 14:14:02 +00:00
LibDiff LibDiff: Remove a bunch of unused code 2025-05-13 12:46:34 +02:00
LibDNS Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
LibFileSystem AK+LibCore: Avoid double-negation of syscall error values 2025-05-10 21:19:46 -04:00
LibGC Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
LibGfx Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
LibHTTP LibURL: Rename 'cannot have a base URL' to 'has an opaque path' 2025-04-06 08:24:54 -04:00
LibIDL Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
LibImageDecoderClient Everywhere: Make TransportSocket non-movable 2025-04-09 15:27:52 +02:00
LibIPC Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
LibJS Revert "LibJS+LibWeb: Return Vector<PropertyKey> from… 2025-05-16 06:33:09 +01:00
LibLine Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
LibMain Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
LibMedia LibMedia: Implement conversion of BT601 primaries 2025-05-16 12:13:13 +01:00
LibRegex Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
LibRequests Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
LibRIFF Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
LibSyntax Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
LibTest LibTest: Support death tests without child process cloning 2025-05-16 13:23:32 -06:00
LibTextCodec Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
LibThreading Everywhere: Fix trivial -Wunnecessary-virtual-specifier instances 2025-05-12 11:40:45 -06:00
LibTLS Everywhere: Run clang-format 2025-05-14 02:01:59 -06:00
LibUnicode LibUnicode: Avoid rejecting end-of-text position as a valid boundary 2025-04-11 15:30:17 -04:00
LibURL Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
LibWasm Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
LibWeb LibWeb: Stub out SVGGraphicsElement.getCTM() 2025-05-16 20:36:07 +02:00
LibWebSocket LibWebSocket: Remove meaningless const&& Message constructor 2025-03-09 11:14:20 -04:00
LibWebView Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00
LibXML Meta: Enforce newlines around namespaces 2025-05-14 02:01:59 -06:00