Skip to content

missing coverage of closing brace in switch/case when const is declared #497

Open

Description

@tbiesemann
  • Node Version:18.14.0
  • c8 Version:8.0.1
  • Platform:Darwin C02C26P7MD6T 23.0.0 Darwin Kernel Version 23.0.0: Fri Sep 15 14:42:42 PDT 2023; root:xnu-10002.1.13~1/RELEASE_X86_64 x86_64
function huhu(someValue) {
	switch (someValue) {
		case true:
			const result = 42;
			return result;
		default:
			return 43;
	}
};
huhu(true);
huhu(false);

Execute with

npx c8 node huhu.js

Reported coverage:
image

If i omit the const declaration and just return 42; the coverage is 100%.
Expectation is to have 100% coverage for the above snippet.

Activity

  1. ericmorand commented on Nov 17, 2023

    @ericmorand
  2. ericmorand commented on Jun 28, 2024

    @ericmorand

    @tbiesemann , in case you are still struggling with the issue, know that if you actually scope your cases body, the issue disappears:

    function huhu(someValue) {
    	switch (someValue) {
    		case true: {
    			const result = 42;
    			return result;
                    }
    		default: {
    			return 43;
                    }
    	}
    };
    huhu(true);
    huhu(false);

    I still don't have an explanation why, but, with your original file, the coverage data emitted by V8 actually include an uncovered range at 144:145 - that is just after the } at line 8 and spans up to the } at line 9. So c8 can't actually do much about that.

    This is probably worth raising an issue at v8 repository.

  3. ericmorand commented on Jun 30, 2024

    @ericmorand

    @tbiesemann , @bcoe , I opened an issue in node.js issue tracker. This is likely to be a v8 issue but since I'm using node.js to reproduce the issue, I have to start there.

  4. archiehharris commented on Jul 2, 2024

    @archiehharris

    There's another open c8 issue #229 asking about an uncovered line of a finally block. I am not sure whether these are related to the same underlying v8 issue but perhaps the repro linked in the comment can help with troubleshooting.

    That other issue's coverage output looks eerily similar:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions