aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/ZigSourceProvider.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-08-06 06:30:23 -0700
committerGravatar GitHub <noreply@github.com> 2023-08-06 06:30:23 -0700
commit14624454196370e08309d4f0b0463b494e4df9ca (patch)
tree538421bfffc3d804807a4ec70a1323fbcbe3416f /src/bun.js/bindings/ZigSourceProvider.cpp
parentecdf2ffa6c615d8a431c2919c0b9bdc4cbe2c4f0 (diff)
downloadbun-14624454196370e08309d4f0b0463b494e4df9ca.tar.gz
bun-14624454196370e08309d4f0b0463b494e4df9ca.tar.zst
bun-14624454196370e08309d4f0b0463b494e4df9ca.zip
Code coverage for `bun test` (#3975)
* WIP code coverage initial commit * almost works * one approach * Code Coverage * Update WebKit * it works but is not yet accurate * skip double ascii check * wrapper * it works but i'm not sure what to do about blocks * hide blocks for now * Update ZigSourceProvider.cpp * Create coverage.md * Update nav.ts --------- Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'src/bun.js/bindings/ZigSourceProvider.cpp')
-rw-r--r--src/bun.js/bindings/ZigSourceProvider.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/bun.js/bindings/ZigSourceProvider.cpp b/src/bun.js/bindings/ZigSourceProvider.cpp
index 2c448b5a6..d11c748da 100644
--- a/src/bun.js/bindings/ZigSourceProvider.cpp
+++ b/src/bun.js/bindings/ZigSourceProvider.cpp
@@ -58,11 +58,48 @@ static SourceOrigin toSourceOrigin(const String& sourceURL, bool isBuiltin)
return SourceOrigin(WTF::URL::fileURLWithFileSystemPath(sourceURL));
}
+void forEachSourceProvider(const WTF::Function<void(JSC::SourceID)>& func)
+{
+ // if (sourceProviderMap == nullptr) {
+ // return;
+ // }
+
+ // for (auto& pair : *sourceProviderMap) {
+ // auto sourceProvider = pair.value;
+ // if (sourceProvider) {
+ // func(sourceProvider);
+ // }
+ // }
+}
+extern "C" int ByteRangeMapping__getSourceID(void* mappings, BunString sourceURL);
+extern "C" void* ByteRangeMapping__find(BunString sourceURL);
+void* sourceMappingForSourceURL(const WTF::String& sourceURL)
+{
+ return ByteRangeMapping__find(Bun::toString(sourceURL));
+}
+
+extern "C" void ByteRangeMapping__generate(BunString sourceURL, BunString code, int sourceID);
+
+JSC::SourceID sourceIDForSourceURL(const WTF::String& sourceURL)
+{
+ void* mappings = ByteRangeMapping__find(Bun::toString(sourceURL));
+ if (!mappings) {
+ return 0;
+ }
+
+ return ByteRangeMapping__getSourceID(mappings, Bun::toString(sourceURL));
+}
+
+extern "C" bool BunTest__shouldGenerateCodeCoverage(BunString sourceURL);
+
Ref<SourceProvider> SourceProvider::create(Zig::GlobalObject* globalObject, ResolvedSource resolvedSource, JSC::SourceProviderSourceType sourceType, bool isBuiltin)
{
auto stringImpl = Bun::toWTFString(resolvedSource.source_code);
auto sourceURLString = toStringCopy(resolvedSource.source_url);
+ bool isCodeCoverageEnabled = !!globalObject->vm().controlFlowProfiler();
+
+ bool shouldGenerateCodeCoverage = isCodeCoverageEnabled && !isBuiltin && BunTest__shouldGenerateCodeCoverage(Bun::toString(sourceURLString));
auto provider = adoptRef(*new SourceProvider(
globalObject->isThreadLocalDefaultGlobalObject ? globalObject : nullptr,
@@ -71,6 +108,10 @@ Ref<SourceProvider> SourceProvider::create(Zig::GlobalObject* globalObject, Reso
sourceURLString.impl(), TextPosition(),
sourceType));
+ if (shouldGenerateCodeCoverage) {
+ ByteRangeMapping__generate(Bun::toString(provider->sourceURL()), Bun::toString(provider->source().toStringWithoutCopying()), provider->asID());
+ }
+
return provider;
}