diff --git a/smithy-build/src/test/resources/software/amazon/smithy/build/transforms/filter-by-tags.smithy b/smithy-build/src/test/resources/software/amazon/smithy/build/transforms/filter-by-tags.smithy index 1760b524943..76463935bf7 100644 --- a/smithy-build/src/test/resources/software/amazon/smithy/build/transforms/filter-by-tags.smithy +++ b/smithy-build/src/test/resources/software/amazon/smithy/build/transforms/filter-by-tags.smithy @@ -18,4 +18,4 @@ intEnum Bar { @tags(["keep"]) @enumValue(2) KEEP -} \ No newline at end of file +} diff --git a/smithy-model/src/test/java/software/amazon/smithy/model/transform/RemoveShapesTest.java b/smithy-model/src/test/java/software/amazon/smithy/model/transform/RemoveShapesTest.java index 3eab0552350..4bac7d7bd27 100644 --- a/smithy-model/src/test/java/software/amazon/smithy/model/transform/RemoveShapesTest.java +++ b/smithy-model/src/test/java/software/amazon/smithy/model/transform/RemoveShapesTest.java @@ -21,6 +21,7 @@ import static org.hamcrest.Matchers.hasKey; import static org.hamcrest.Matchers.not; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.ArrayList; import java.util.Arrays; @@ -34,7 +35,10 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import software.amazon.smithy.model.Model; +import software.amazon.smithy.model.SourceException; import software.amazon.smithy.model.node.Node; +import software.amazon.smithy.model.shapes.EnumShape; +import software.amazon.smithy.model.shapes.IntEnumShape; import software.amazon.smithy.model.shapes.ListShape; import software.amazon.smithy.model.shapes.MapShape; import software.amazon.smithy.model.shapes.MemberShape; @@ -103,6 +107,56 @@ public void removesMapMembersWhenRemoved() { assertContainerMembersAreRemoved(container, Arrays.asList(key, value)); } + @Test + public void removesEnumMembersWhenRemoved() { + EnumShape container = EnumShape.builder() + .id(ShapeId.from("ns.foo#Enum")) + .addMember("foo", "foo") + .build(); + assertContainerMembersAreRemoved(container, new ArrayList<>(container.members())); + } + + @Test + public void notAllEnumMembersCanBeRemoved() { + EnumShape container = EnumShape.builder() + .id(ShapeId.from("ns.foo#Enum")) + .addMember("foo", "foo") + .build(); + + Model.Builder builder = Model.builder() + .addShape(container) + .addShape(StringShape.builder().id(STRING_TARGET).build()); + container.members().forEach(builder::addShape); + Model model = builder.build(); + ModelTransformer transformer = ModelTransformer.create(); + assertThrows(SourceException.class, () -> transformer.removeShapes(model, container.members())); + } + + @Test + public void removesIntEnumMembersWhenRemoved() { + IntEnumShape container = IntEnumShape.builder() + .id(ShapeId.from("ns.foo#Enum")) + .addMember("foo", 1) + .build(); + assertContainerMembersAreRemoved(container, new ArrayList<>(container.members())); + } + + @Test + public void notAllIntEnumMembersCanBeRemoved() { + IntEnumShape container = IntEnumShape.builder() + .id(ShapeId.from("ns.foo#Enum")) + .addMember("foo", 1) + .build(); + + Model.Builder builder = Model.builder() + .addShape(container) + .addShape(StringShape.builder().id(STRING_TARGET).build()); + container.members().forEach(builder::addShape); + Model model = builder.build(); + ModelTransformer transformer = ModelTransformer.create(); + assertThrows(SourceException.class, () -> transformer.removeShapes(model, container.members())); + } + @Test public void removesStructureMembersWhenRemoved() { MemberShape a = MemberShape.builder()