@Test
public void copiesOnlyFilesFromSourcesForProjection() throws URISyntaxException {

    Model model = Model.assembler()
            .addImport(getClass().getResource("sources/a.smithy"))
            .addImport(getClass().getResource("sources/b.smithy"))
            .addImport(getClass().getResource("sources/c/c.json"))
            .addImport(getClass().getResource("notsources/d.smithy"))
            .assemble()
            .unwrap();
    MockManifest manifest = new MockManifest();
    ProjectionConfig projection = ProjectionConfig.builder().build();
    PluginContext context = PluginContext.builder()
            .projection("foo", projection)
            .fileManifest(manifest)
            .model(model)
            .originalModel(model)
            .sources(ListUtils.of(Paths.get(getClass().getResource("sources/a.smithy").toURI()).getParent()))
            .build();
    new SourcesPlugin().execute(context);
    String manifestString = manifest.getFileString("manifest").get();
    String modelString = manifest.getFileString("model.json").get();
    assertThat(manifestString, equalTo("model.json\n"));
    assertThat(modelString, containsString("AString"));
    assertThat(modelString, containsString("BString"));
    assertThat(modelString, containsString("CString"));
    assertThat(modelString, containsString("metadata-a"));
    assertThat(modelString, containsString("metadata-b"));
    assertThat(modelString, containsString("metadata-c"));
    assertThat(modelString, containsString("Atrait"));
    assertThat(modelString, containsString("Btrait"));
    assertThat(modelString, containsString("Ctrait"));
    assertThat(modelString, not(containsString("DString")));
    assertThat(modelString, not(containsString("metadata-d")));
    assertThat(modelString, not(containsString("Dtrait")));
}