Skip to content

Commit

Permalink
JS-188 Directive can be used as a Statement
Browse files Browse the repository at this point in the history
  • Loading branch information
quentin-jaquier-sonarsource committed Jun 18, 2024
1 parent 7adf07d commit 09650e4
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,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<Identifier> exported, Literal source) implements ModuleDeclaration {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -562,6 +562,31 @@ void should_create_empty_statement_type() {
assertThat(estree).isInstanceOf(ESTree.EmptyStatement.class);
}

@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 09650e4

Please sign in to comment.