Skip to content

Commit cd2a7b2

Browse files
committed
first drafts generating errors
known errors: - does not take type parameters into account which are defined next to SubjecT in the kotlin expectation function - inlining xyz(..).transform() calls does not always work because body of IrFunction is empty
1 parent c15a741 commit cd2a7b2

File tree

65 files changed

+1182
-54
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+1182
-54
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
plugins {
2+
id("build-logic.published-java-library")
3+
}
4+
5+
description = "A fluent expectation function API for java with a focus on code completion"
6+
7+
sourceSets {
8+
main {
9+
java {
10+
srcDir(project.layout.projectDirectory.dir("src/main/generated/java").asFile)
11+
}
12+
}
13+
}
14+
15+
dependencies {
16+
api(prefixedProject("logic"))
17+
18+
testImplementation(prefixedProject("specs"))
19+
testImplementation(libs.junit.jupiter)
20+
testRuntimeOnly(libs.junit.platform.launcher)
21+
}
22+
23+
24+
junitjacoco {
25+
additionalProjectSources.addAll(
26+
prefixedProject("translations-en_GB"),
27+
prefixedProject("logic"),
28+
prefixedProject("core"),
29+
)
30+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package ch.tutteli.atrium.api.fluent.java;
2+
3+
import ch.tutteli.atrium.creating.AssertionContainer;
4+
import ch.tutteli.atrium.creating.Expect;
5+
import ch.tutteli.atrium.logic.AnyKt;
6+
import ch.tutteli.atrium.logic.LogicKt;
7+
import kotlin.Unit;
8+
import kotlin.jvm.functions.Function1;
9+
10+
import java.util.function.Function;
11+
12+
public abstract class AbstractAnyExpect<SubjectT, SelfT extends AbstractAnyExpect<SubjectT, SelfT>>
13+
extends AbstractExpect<SubjectT, SelfT> {
14+
public AbstractAnyExpect(Expect<SubjectT> expect) {
15+
super(expect);
16+
}
17+
18+
public SelfT toEqual(SubjectT expected) {
19+
AssertionContainer<SubjectT> container = LogicKt.get_logic(coreExpect);
20+
return switchCoreExpect(container.append(AnyKt.toBe(container, expected)));
21+
}
22+
23+
public <NewSubjectT, NewExpectT extends AbstractExpect<NewSubjectT, NewExpectT>> NewExpectT feature(Function<SubjectT, NewExpectT> t) {}
24+
25+
26+
public SelfT toEqualNullIfNullGivenElse(ExpectationCreator<SubjectT, SelfT> assertionCreatorOrNull) {
27+
AssertionContainer<SubjectT> container = LogicKt.get_logic(coreExpect);
28+
return switchCoreExpect(container.append(AnyKt.toBeNullIfNullGivenElse(container, assertionCreatorOrNull.toKotlin(this::createSelf))));
29+
}
30+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package ch.tutteli.atrium.api.fluent.java;
2+
3+
import ch.tutteli.atrium.creating.Expect;
4+
5+
public abstract class AbstractBlockExpect<SubjectT extends Block, SelfT extends AbstractBlockExpect<SubjectT, SelfT>> extends AbstractAnyExpect<SubjectT, SelfT> {
6+
7+
public AbstractBlockExpect(Expect<SubjectT> expect) {
8+
super(expect);
9+
}
10+
11+
public <T extends Throwable> AnyExpect<T> toThrow(Class<T> c) {
12+
return null;
13+
}
14+
15+
public <T extends Throwable> AnyExpect<T> toThrow(Class<T> c, ExpectationCreator<T, AnyExpect<T>> e) {
16+
return null;
17+
}
18+
public <T extends Throwable> AnyExpect<T> notToThrow(Class<T> c) {
19+
return null;
20+
}
21+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package ch.tutteli.atrium.api.fluent.java;
2+
3+
import ch.tutteli.atrium.creating.AssertionContainer;
4+
import ch.tutteli.atrium.creating.Expect;
5+
import ch.tutteli.atrium.logic.ComparableKt;
6+
import ch.tutteli.atrium.logic.LogicKt;
7+
8+
public abstract class AbstractComparableExpect<SubjectT extends Comparable<SubjectT>, SelfT extends AbstractComparableExpect<SubjectT, SelfT>>
9+
extends AbstractAnyExpect<SubjectT, SelfT> {
10+
public AbstractComparableExpect(Expect<SubjectT> expect) {
11+
super(expect);
12+
}
13+
14+
public SelfT toBeLessThan(SubjectT expected) {
15+
AssertionContainer<SubjectT> container = LogicKt.get_logic(coreExpect);
16+
return switchCoreExpect(container.append(ComparableKt.isLessThan(container, expected)));
17+
}
18+
19+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package ch.tutteli.atrium.api.fluent.java;
2+
3+
import ch.tutteli.atrium.creating.Expect;
4+
5+
public abstract class AbstractExpect<SubjectT, SelfT extends AbstractExpect<SubjectT, SelfT>> {
6+
protected Expect<SubjectT> coreExpect;
7+
8+
public AbstractExpect(Expect<SubjectT> expect) {
9+
this.coreExpect = expect;
10+
}
11+
12+
@SuppressWarnings("unchecked")
13+
final protected SelfT self() {
14+
return (SelfT) this;
15+
}
16+
17+
final protected SelfT switchCoreExpect(Expect<SubjectT> newExpect) {
18+
coreExpect = newExpect;
19+
return self();
20+
}
21+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package ch.tutteli.atrium.api.fluent.java;
2+
3+
import ch.tutteli.atrium.creating.Expect;
4+
5+
public class AnyExpect<SubjectT>
6+
extends AbstractAnyExpect<SubjectT, AnyExpect<SubjectT>> {
7+
8+
public AnyExpect(Expect<SubjectT> expect) {
9+
super(expect);
10+
}
11+
12+
@Override
13+
public AnyExpect<SubjectT> createSelf(Expect<SubjectT> expect) {
14+
return new AnyExpect<>(expect);
15+
}
16+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package ch.tutteli.atrium.api.fluent.java;
2+
3+
public interface Block {
4+
void action();
5+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package ch.tutteli.atrium.api.fluent.java;
2+
3+
import ch.tutteli.atrium.creating.Expect;
4+
5+
public class BlockExpect<SubjectT extends Block> extends AbstractBlockExpect<Block, BlockExpect<SubjectT>> {
6+
7+
public BlockExpect(Expect<Block> expect) {
8+
super(expect);
9+
}
10+
11+
@Override
12+
public BlockExpect createSelf(Expect<Block> coreExpect) {
13+
return new BlockExpect((coreExpect));
14+
}
15+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package ch.tutteli.atrium.api.fluent.java;
2+
3+
import ch.tutteli.atrium.creating.Expect;
4+
5+
public class ComparableExpect<SubjectT extends Comparable<SubjectT>>
6+
extends AbstractComparableExpect<SubjectT, ComparableExpect<SubjectT>> {
7+
8+
public ComparableExpect(Expect<SubjectT> expect) {
9+
super(expect);
10+
}
11+
12+
@Override
13+
public ComparableExpect<SubjectT> createSelf(Expect<SubjectT> coreExpect) {
14+
return new ComparableExpect<>(coreExpect);
15+
}
16+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package ch.tutteli.atrium.api.fluent.java;
2+
3+
import ch.tutteli.atrium.creating.Expect;
4+
import kotlin.Unit;
5+
6+
import java.util.function.Consumer;
7+
import java.util.function.Function;
8+
9+
public interface ExpectationCreator<SubjectT, SelfT extends AbstractExpect<SubjectT, SelfT>> extends Consumer<SelfT> {
10+
default kotlin.jvm.functions.Function1<Expect<SubjectT>, kotlin.Unit> toKotlin(Function<Expect<SubjectT>, SelfT> factory) {
11+
return (expect) -> {
12+
accept(factory.apply(expect));
13+
return Unit.INSTANCE;
14+
};
15+
}
16+
}

0 commit comments

Comments
 (0)