Skip to content

Commit

Permalink
JS-188 Directive can be used as a Statement (#4742)
Browse files Browse the repository at this point in the history
  • Loading branch information
quentin-jaquier-sonarsource authored Jun 18, 2024
1 parent 2febb26 commit 42d6116
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ public record ClassExpression(Location loc, Optional<Identifier> id, Optional<Ex
public record ConditionalExpression(Location loc, Expression test, Expression alternate, Expression consequent) implements Expression {}
public record ContinueStatement(Location loc, Optional<Identifier> label) implements Statement {}
public record DebuggerStatement(Location loc) implements Statement {}
public record Directive(Location loc, Literal expression, String directive) implements DirectiveOrModuleDeclarationOrStatement {}
public record Directive(Location loc, Literal expression, String directive) implements Statement {}
public record DoWhileStatement(Location loc, Statement body, Expression test) implements Statement {}
public record EmptyStatement(Location loc) implements Statement {}
public record ExportAllDeclaration(Location loc, Optional<IdentifierOrLiteral> exported, Literal source) implements ModuleDeclaration {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ void test_expression_subclasses() {
void test_statement_subclasses() {
Class<?> sealedClass = ESTree.Statement.class;
Class<?>[] permittedSubclasses = sealedClass.getPermittedSubclasses();
assertThat(permittedSubclasses).hasSize(20);
assertThat(permittedSubclasses).hasSize(21);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -616,6 +616,31 @@ void should_create_export_all_declaration_type_using_a_literal() {
});
}

@Test
void directive_can_be_in_block_statement() {
BlockStatement blockStatement = BlockStatement.newBuilder()
.addBody(Node.newBuilder()
.setType(NodeType.ExpressionStatementType)
.setExpressionStatement(ExpressionStatement.newBuilder()
.setDirective("directiveName")
.setExpression(Node.newBuilder().setType(NodeType.LiteralType).build())
.build())
.build())
.build();
Node protobufNode = Node.newBuilder()
.setType(NodeType.BlockStatementType)
.setBlockStatement(blockStatement)
.build();

ESTree.Node estree = ESTreeFactory.from(protobufNode, ESTree.Node.class);
assertThat(estree).isInstanceOfSatisfying(ESTree.BlockStatement.class, block -> {
assertThat(block.body()).hasSize(1);
assertThat(block.body().get(0)).isInstanceOfSatisfying(ESTree.Directive.class, directive -> {
assertThat(directive.directive()).isEqualTo("directiveName");
});
});
}

@Test
void throw_exception_from_unrecognized_type() {
Node protobufNode = Node.newBuilder()
Expand Down

0 comments on commit 42d6116

Please sign in to comment.