Skip to content

Commit

Permalink
Merge pull request #72 from gradle/tt/expose-more-test-config-options
Browse files Browse the repository at this point in the history
Supports Additional properties and conventions for testing and Room
  • Loading branch information
tresat committed May 23, 2024
2 parents 9914e2f + c0f8467 commit 15dc626
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 16 deletions.
2 changes: 2 additions & 0 deletions unified-prototype/unified-plugin/gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ ksp = "1.9.23-1.0.20"
# Find latest version at: https://developer.android.com/reference/tools/gradle-api
android = "8.3.0"
hilt = "2.50"
room = "2.6.1"

apache-commons = "3.3.1"

Expand All @@ -22,6 +23,7 @@ android-kotlin-android = { module = "org.jetbrains.kotlin.android:org.jetbrains.
hilt-android-plugin = { module = "com.google.dagger:hilt-android-gradle-plugin", version.ref = "hilt" }
hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hilt"}
hilt-compiler = { module = "com.google.dagger:hilt-android-compiler", version.ref = "hilt" }
room-plugin = { module = "androidx.room:room-gradle-plugin", version.ref = "room" }

# Other libraries
apache-commons-lang = { module = "org.apache.commons:commons-lang3", version.ref = "apache-commons" }
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ dependencies {
implementation(libs.ksp.plugin)
implementation(libs.hilt.android.plugin)
implementation(libs.kotlin.serialization.plugin)
implementation(libs.room.plugin)

implementation(libs.apache.commons.lang)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package org.gradle.api.experimental.android;

import androidx.room.gradle.RoomExtension;
import com.android.build.api.dsl.*;
import com.google.devtools.ksp.gradle.KspExtension;
import org.gradle.api.*;
import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.experimental.android.extensions.testing.AndroidTestDependencies;
Expand All @@ -10,6 +12,8 @@
import org.gradle.api.provider.Property;
import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension;

import java.io.File;
import java.nio.file.Path;
import java.util.Objects;

import static org.gradle.api.experimental.android.extensions.ComposeSupport.configureCompose;
Expand Down Expand Up @@ -46,6 +50,8 @@ public void apply(Project project) {
dslModel.getFeature().getEnabled().convention(false);
dslModel.getCompose().getEnabled().convention(false);
dslModel.getHilt().getEnabled().convention(false);
dslModel.getRoom().getEnabled().convention(false);
dslModel.getRoom().getVersion().convention("2.6.1");

// Setup Test Options conventions
dslModel.getTesting().getTestOptions().getIncludeAndroidResources().convention(false);
Expand Down Expand Up @@ -103,6 +109,7 @@ protected void linkDslModelToPlugin(Project project, AndroidSoftware dslModel, C
configureDesugaring(project, dslModel, android);
configureHilt(project, dslModel, android);
configureCompose(project, dslModel, android);
configureRoom(project, dslModel, android);
}

protected void configureHilt(Project project, AndroidSoftware dslModel, CommonExtension<?, ?, ?, ?, ?, ?> android) {
Expand All @@ -117,6 +124,28 @@ protected void configureHilt(Project project, AndroidSoftware dslModel, CommonEx
}
}

@SuppressWarnings("UnstableApiUsage")
protected void configureRoom(Project project, AndroidSoftware dslModel, CommonExtension<?, ?, ?, ?, ?, ?> android) {
if (dslModel.getRoom().getEnabled().get()) {
project.getPlugins().apply("androidx.room");
project.getPlugins().apply("com.google.devtools.ksp");

KspExtension kspExtension = project.getExtensions().getByType(KspExtension.class);
kspExtension.arg("room.generateKotlin", "true");

RoomExtension room = project.getExtensions().getByType(RoomExtension.class);
// The schemas directory contains a schema file for each version of the Room database.
// This is required to enable Room auto migrations.
// See https://developer.android.com/reference/kotlin/androidx/room/AutoMigration.
ifPresent(dslModel.getRoom().getSchemaDirectory(), room::schemaDirectory);

String roomVersion = dslModel.getRoom().getVersion().get();
dslModel.getDependencies().getImplementation().add("androidx.room:room-runtime:" + roomVersion);
dslModel.getDependencies().getImplementation().add("androidx.room:room-ktx:" + roomVersion);
project.getDependencies().add("ksp", "androidx.room:room-compiler:" + roomVersion);
}
}

protected void configureDesugaring(Project project, AndroidSoftware dslModel, CommonExtension<?, ?, ?, ?, ?, ?> android) {
if (dslModel.getCoreLibraryDesugaring().getEnabled().get()) {
android.compileOptions(compileOptions -> {
Expand All @@ -132,7 +161,9 @@ protected void configureDesugaring(Project project, AndroidSoftware dslModel, Co
protected void configureTesting(Project project, AndroidSoftware dslModel, CommonExtension<?, ?, ?, ?, ?, ?> android) {
Testing testing = dslModel.getTesting();
AndroidTestDependencies testDependencies = testing.getDependencies();

TestOptions testOptions = testing.getTestOptions();
ifPresent(testOptions.getTestInstrumentationRunner(), android.getDefaultConfig()::setTestInstrumentationRunner);

UnitTestOptions unitTestOptions = android.getTestOptions().getUnitTests();
unitTestOptions.setIncludeAndroidResources(testOptions.getIncludeAndroidResources().get());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.gradle.api.experimental.android.extensions.KotlinSerialization;
import org.gradle.api.experimental.android.extensions.testing.Testing;
import org.gradle.api.experimental.android.nia.Feature;
import org.gradle.api.experimental.android.extensions.Room;
import org.gradle.api.provider.Property;
import org.gradle.api.tasks.Nested;
import org.gradle.declarative.dsl.model.annotations.Configuring;
Expand Down Expand Up @@ -89,6 +90,16 @@ default void hilt(Action<? super Hilt> action) {
hilt.getEnabled().set(true);
}

@Nested
Room getRoom();

@Configuring
default void room(Action<? super Room> action) {
Room room = getRoom();
action.execute(room);
room.getEnabled().set(true);
}

@Nested
Testing getTesting();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.gradle.api.experimental.android.extensions;

import org.gradle.api.provider.Property;
import org.gradle.declarative.dsl.model.annotations.Restricted;

@Restricted
public interface Room {
Property<Boolean> getEnabled();

@Restricted
Property<String> getSchemaDirectory();

/**
* Room libraries version to use.
*/
@Restricted
Property<String> getVersion();
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,7 @@ public interface TestOptions {

@Restricted
Property<Boolean> getReturnDefaultValues();

@Restricted
Property<String> getTestInstrumentationRunner();
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,9 @@
import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.experimental.android.AbstractAndroidSoftwarePlugin;
import org.gradle.api.experimental.android.AndroidSoftware;
import org.gradle.api.experimental.android.AndroidSoftwareBuildType;
import org.gradle.api.experimental.android.nia.NiaSupport;
import org.gradle.api.internal.plugins.software.SoftwareType;

import java.util.Objects;

/**
* Creates a declarative {@link AndroidLibrary} DSL model, applies the official Android plugin,
* and links the declarative model to the official plugin.
Expand Down Expand Up @@ -63,16 +60,8 @@ private void linkCommonDependencies(AndroidLibraryDependencies dependencies, Con
configurations.getByName("api").fromDependencyCollector(dependencies.getApi()); // API deps added for libraries
}

/**
* Links build types from the model to the android extension.
*/
@Override
protected void linkBuildType(BuildType buildType, AndroidSoftwareBuildType model, ConfigurationContainer configurations) {
super.linkBuildType(buildType, model, configurations);
linkApiBuildTypeDependencies(buildType, (AndroidLibraryDependencies) model.getDependencies(), configurations);
}

private void linkApiBuildTypeDependencies(BuildType buildType, AndroidLibraryDependencies dependencies, ConfigurationContainer configurations) {
private void linkBuildTypeDependencies(BuildType buildType, AndroidLibraryDependencies dependencies, ConfigurationContainer configurations) {
super.linkBuildTypeDependencies(buildType, dependencies, configurations);
String name = buildType.getName();
configurations.getByName(name + "Api").fromDependencyCollector(dependencies.getApi());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ private static void configureNia(Project project, AndroidSoftware dslModel, Comm
}

if (dslModel.getFeature().getEnabled().get()) {
configureFeature(project, android);
configureFeature(project, dslModel, android);
}
}

Expand All @@ -85,8 +85,7 @@ private static void disableUnnecessaryAndroidTests(Project project, LibraryAndro
}

@SuppressWarnings("UnstableApiUsage")
private static void configureFeature(Project project, CommonExtension<?, ?, ?, ?, ?, ?> android) {
android.getDefaultConfig().setTestInstrumentationRunner("com.google.samples.apps.nowinandroid.core.testing.NiaTestRunner");
private static void configureFeature(Project project, AndroidSoftware dslModel, CommonExtension<?, ?, ?, ?, ?, ?> android) {
android.getTestOptions().setAnimationsDisabled(true);

project.getDependencies().add("implementation", project.project(":core:ui"));
Expand Down

0 comments on commit 15dc626

Please sign in to comment.