use of io.jbock.testing.compile.Compilation in project jbock by jbock-java.
the class DependsOnGeneratedTypeTest method dependsOnGeneratedType.
@Test
void dependsOnGeneratedType() {
JavaFileObject command = forSourceLines("test.Arguments", "package test;", "", "import java.util.Optional;", "import java.util.function.Supplier;", "import net.jbock.Command;", "import net.jbock.Parameter;", "import net.jbock.util.StringConverter;", "", "@Command", "abstract class Arguments {", "", " @Parameter(index = 0, converter = Mimi.class)", " abstract Optional<GeneratedType> hello();", "", " static class Mimi implements Supplier<StringConverter<GeneratedType>> {", " public StringConverter<GeneratedType> get() { return new MapMap(); }", " }", "}");
GeneratingProcessor generatingProcessor = new GeneratingProcessor("test.GeneratedType", "package test;", "", "final class GeneratedType {", "}");
GeneratingProcessor converter = new GeneratingProcessor("test.MapMap", "package test;", "", "import net.jbock.util.StringConverter;", "", "class MapMap extends StringConverter<GeneratedType> {", "", " @Override", " public GeneratedType convert(String token) { return null; }", "}");
Compilation compilation = Processor.compiler(generatingProcessor, converter).compile(command);
assertThat(compilation).succeededWithoutWarnings();
}
use of io.jbock.testing.compile.Compilation in project jbock by jbock-java.
the class ParseOrExitFullTest method testBasicGenerated.
@Test
void testBasicGenerated() {
JavaFileObject javaFile = fromSource("@Command", "abstract class Arguments {", "", " @Parameters", " abstract List<String> hello();", "}");
List<String> expectedParser = List.of("package test;", "", "import io.jbock.util.Either;", "import io.jbock.util.Eithers;", "import java.util.List;", "import java.util.Map;", "import java.util.function.Function;", "import javax.annotation.processing.Generated;", "import net.jbock.contrib.StandardErrorHandler;", "import net.jbock.model.CommandModel;", "import net.jbock.model.ItemType;", "import net.jbock.model.Multiplicity;", "import net.jbock.model.Parameter;", "import net.jbock.parse.RestParser;", "import net.jbock.util.ExConvert;", "import net.jbock.util.ExFailure;", "import net.jbock.util.ParseRequest;", "import net.jbock.util.ParsingFailed;", "import net.jbock.util.StringConverter;", "", "@Generated(", " value = \"net.jbock.processor.JbockProcessor\",", " comments = \"https://github.com/jbock-java\"", ")", "final class ArgumentsParser {", " Either<ParsingFailed, Arguments> parse(List<String> tokens) {", " RestParser<Void> parser = RestParser.create(Map.of(), Map.of(), 0);", " try {", " parser.parse(tokens);", " return Either.right(harvest(parser));", " } catch (ExFailure e) {", " return Either.left(e.toError(createModel()));", " }", " }", "", " Arguments parseOrExit(String[] args) {", " if (args.length > 0 && \"--help\".equals(args[0])) {", " StandardErrorHandler.builder().build()", " .printUsageDocumentation(createModel());", " System.exit(0);", " }", " return ParseRequest.from(args).expand()", " .mapLeft(err -> err.addModel(createModel()))", " .flatMap(this::parse)", " .orElseThrow(failure -> {", " StandardErrorHandler.builder().build().printErrorMessage(failure);", " System.exit(1);", " return new RuntimeException();", " });", " }", "", " private Arguments harvest(RestParser<Void> parser) throws ExFailure {", " List<String> _hello = parser.rest()", " .map(StringConverter.create(Function.identity()))", " .collect(Eithers.firstFailure())", " .orElseThrow(left -> new ExConvert(left, ItemType.PARAMETER, 0));", " return new Arguments_Impl(_hello);", " }", "", " CommandModel createModel() {", " return CommandModel.builder()", " .withProgramName(\"arguments\")", " .addParameter(Parameter.builder(Multiplicity.REPEATABLE)", " .withParamLabel(\"HELLO\")", " .build())", " .build();", " }", "}");
List<String> expectedImpl = List.of("package test;", "", "import java.util.List;", "import javax.annotation.processing.Generated;", "", "@Generated(", " value = \"net.jbock.processor.JbockProcessor\",", " comments = \"https://github.com/jbock-java\"", ")", "final class Arguments_Impl extends Arguments {", " private final List<String> hello;", "", " Arguments_Impl(List<String> hello) {", " this.hello = hello;", " }", "", " @Override", " List<String> hello() {", " return hello;", " }", "}");
Compilation compilation = Processor.compiler().compile(javaFile);
assertThat(compilation).succeeded();
assertThat(compilation).generatedSourceFile("test.ArgumentsParser").contentsAsUtf8Iterable().containsExactlyElementsIn(expectedParser).inOrder();
assertThat(compilation).generatedSourceFile("test.Arguments_Impl").contentsAsUtf8Iterable().containsExactlyElementsIn(expectedImpl).inOrder();
}
use of io.jbock.testing.compile.Compilation in project jbock by jbock-java.
the class BasicFullTest method testBasicGenerated.
@Test
void testBasicGenerated() {
JavaFileObject javaFile = fromSource("@Command(skipGeneratingParseOrExitMethod = true)", "abstract class Arguments {", "", " @Parameters", " abstract List<String> hello();", "}");
List<String> expectedParser = List.of("package test;", "", "import io.jbock.util.Either;", "import io.jbock.util.Eithers;", "import java.util.List;", "import java.util.Map;", "import java.util.function.Function;", "import javax.annotation.processing.Generated;", "import net.jbock.model.CommandModel;", "import net.jbock.model.ItemType;", "import net.jbock.model.Multiplicity;", "import net.jbock.model.Parameter;", "import net.jbock.parse.RestParser;", "import net.jbock.util.ExConvert;", "import net.jbock.util.ExFailure;", "import net.jbock.util.ParsingFailed;", "import net.jbock.util.StringConverter;", "", "@Generated(", " value = \"net.jbock.processor.JbockProcessor\",", " comments = \"https://github.com/jbock-java\"", ")", "final class ArgumentsParser {", " Either<ParsingFailed, Arguments> parse(List<String> tokens) {", " RestParser<Void> parser = RestParser.create(Map.of(), Map.of(), 0);", " try {", " parser.parse(tokens);", " return Either.right(harvest(parser));", " } catch (ExFailure e) {", " return Either.left(e.toError(createModel()));", " }", " }", "", " private Arguments harvest(RestParser<Void> parser) throws ExFailure {", " List<String> _hello = parser.rest()", " .map(StringConverter.create(Function.identity()))", " .collect(Eithers.firstFailure())", " .orElseThrow(left -> new ExConvert(left, ItemType.PARAMETER, 0));", " return new Arguments_Impl(_hello);", " }", "", " CommandModel createModel() {", " return CommandModel.builder()", " .withProgramName(\"arguments\")", " .addParameter(Parameter.builder(Multiplicity.REPEATABLE)", " .withParamLabel(\"HELLO\")", " .build())", " .build();", " }", "}");
List<String> expectedImpl = List.of("package test;", "", "import java.util.List;", "import javax.annotation.processing.Generated;", "", "@Generated(", " value = \"net.jbock.processor.JbockProcessor\",", " comments = \"https://github.com/jbock-java\"", ")", "final class Arguments_Impl extends Arguments {", " private final List<String> hello;", "", " Arguments_Impl(List<String> hello) {", " this.hello = hello;", " }", "", " @Override", " List<String> hello() {", " return hello;", " }", "}");
Compilation compilation = Processor.compiler().compile(javaFile);
assertThat(compilation).succeeded();
assertThat(compilation).generatedSourceFile("test.ArgumentsParser").contentsAsUtf8Iterable().containsExactlyElementsIn(expectedParser).inOrder();
assertThat(compilation).generatedSourceFile("test.Arguments_Impl").contentsAsUtf8Iterable().containsExactlyElementsIn(expectedImpl).inOrder();
}
use of io.jbock.testing.compile.Compilation in project jbock by jbock-java.
the class BasicFullTest method testPublicParser.
@Test
void testPublicParser() {
JavaFileObject javaFile = fromSource("@Command(skipGeneratingParseOrExitMethod = true, publicParser = true)", "abstract class Arguments {", "", " @Parameters", " abstract List<String> hello();", "}");
List<String> expectedParser = List.of("package test;", "", "import io.jbock.util.Either;", "import io.jbock.util.Eithers;", "import java.util.List;", "import java.util.Map;", "import java.util.function.Function;", "import javax.annotation.processing.Generated;", "import net.jbock.model.CommandModel;", "import net.jbock.model.ItemType;", "import net.jbock.model.Multiplicity;", "import net.jbock.model.Parameter;", "import net.jbock.parse.RestParser;", "import net.jbock.util.ExConvert;", "import net.jbock.util.ExFailure;", "import net.jbock.util.ParsingFailed;", "import net.jbock.util.StringConverter;", "", "@Generated(", " value = \"net.jbock.processor.JbockProcessor\",", " comments = \"https://github.com/jbock-java\"", ")", "public final class ArgumentsParser {", " public Either<ParsingFailed, Arguments> parse(List<String> tokens) {", " RestParser<Void> parser = RestParser.create(Map.of(), Map.of(), 0);", " try {", " parser.parse(tokens);", " return Either.right(harvest(parser));", " } catch (ExFailure e) {", " return Either.left(e.toError(createModel()));", " }", " }", "", " private Arguments harvest(RestParser<Void> parser) throws ExFailure {", " List<String> _hello = parser.rest()", " .map(StringConverter.create(Function.identity()))", " .collect(Eithers.firstFailure())", " .orElseThrow(left -> new ExConvert(left, ItemType.PARAMETER, 0));", " return new Arguments_Impl(_hello);", " }", "", " public CommandModel createModel() {", " return CommandModel.builder()", " .withProgramName(\"arguments\")", " .addParameter(Parameter.builder(Multiplicity.REPEATABLE)", " .withParamLabel(\"HELLO\")", " .build())", " .build();", " }", "}");
List<String> expectedImpl = List.of("package test;", "", "import java.util.List;", "import javax.annotation.processing.Generated;", "", "@Generated(", " value = \"net.jbock.processor.JbockProcessor\",", " comments = \"https://github.com/jbock-java\"", ")", "final class Arguments_Impl extends Arguments {", " private final List<String> hello;", "", " Arguments_Impl(List<String> hello) {", " this.hello = hello;", " }", "", " @Override", " List<String> hello() {", " return hello;", " }", "}");
Compilation compilation = Processor.compiler().compile(javaFile);
assertThat(compilation).succeeded();
assertThat(compilation).generatedSourceFile("test.ArgumentsParser").contentsAsUtf8Iterable().containsExactlyElementsIn(expectedParser).inOrder();
assertThat(compilation).generatedSourceFile("test.Arguments_Impl").contentsAsUtf8Iterable().containsExactlyElementsIn(expectedImpl).inOrder();
}
use of io.jbock.testing.compile.Compilation in project dapper by jbock-java.
the class ComponentProcessorTest method simpleComponent.
@EnumSource(CompilerMode.class)
@ParameterizedTest
void simpleComponent(CompilerMode compilerMode) {
JavaFileObject injectableTypeFile = JavaFileObjects.forSourceLines("test.SomeInjectableType", "package test;", "", "import jakarta.inject.Inject;", "", "final class SomeInjectableType {", " @Inject SomeInjectableType() {}", "}");
JavaFileObject componentFile = JavaFileObjects.forSourceLines("test.SimpleComponent", "package test;", "", "import dagger.Component;", "import dagger.Lazy;", "import jakarta.inject.Provider;", "", "@Component", "interface SimpleComponent {", " SomeInjectableType someInjectableType();", " Lazy<SomeInjectableType> lazySomeInjectableType();", " Provider<SomeInjectableType> someInjectableTypeProvider();", "}");
JavaFileObject generatedComponent = compilerMode.javaFileBuilder("test.DaggerSimpleComponent").addLines("package test;", "").addLines(GeneratedLines.generatedImports("import dagger.Lazy;", "import dagger.internal.DoubleCheck;", "import jakarta.inject.Provider;")).addLines("").addLines(GeneratedLines.generatedAnnotations()).addLines("final class DaggerSimpleComponent implements SimpleComponent {", " private final DaggerSimpleComponent simpleComponent = this;").addLinesIn(FAST_INIT_MODE, " @Override", " public SomeInjectableType someInjectableType() {", " return someInjectableTypeProvider.get();", " }", "", " @Override", " public Lazy<SomeInjectableType> lazySomeInjectableType() {", " return DoubleCheck.lazy(someInjectableTypeProvider);", " }", "", " @Override", " public Provider<SomeInjectableType> someInjectableTypeProvider() {", " return someInjectableTypeProvider;", " }", "", " @SuppressWarnings(\"unchecked\")", " private void initialize() {", " this.someInjectableTypeProvider = new SwitchingProvider<>(simpleComponent, 0);", " }", "", " private static final class SwitchingProvider<T> implements Provider<T> {", " private final DaggerSimpleComponent simpleComponent;", "", " @SuppressWarnings(\"unchecked\")", " @Override", " public T get() {", " switch (id) {", " case 0: // test.SomeInjectableType ", " return (T) new SomeInjectableType();", " default: throw new AssertionError(id);", " }", " }").addLinesIn(DEFAULT_MODE, " @Override", " public SomeInjectableType someInjectableType() {", " return new SomeInjectableType();", " }", "", " @Override", " public Lazy<SomeInjectableType> lazySomeInjectableType() {", " return DoubleCheck.lazy(SomeInjectableType_Factory.create());", " }", "", " @Override", " public Provider<SomeInjectableType> someInjectableTypeProvider() {", " return SomeInjectableType_Factory.create();", " }", "}").build();
Compilation compilation = compilerWithOptions(compilerMode.javacopts()).compile(injectableTypeFile, componentFile);
assertThat(compilation).succeeded();
assertThat(compilation).generatedSourceFile("test.DaggerSimpleComponent").containsLines(generatedComponent);
}
Aggregations