Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ec5e313e authored by Makoto Onuki's avatar Makoto Onuki
Browse files

Ravenwood/HostStubGen refactor and bug fixe

- Bug fix: Now native substitution methods can handle bytes correctly.

- Spec change: disallow using DisabledOnNonRavenwood on types.

It turned out the device side test runner can't handle it if a class rule
uses Assume.

We could still support it with a non-class rule, but to avoid confusion,
let's disallow using it on classes for the time being.

- Add more tests

- Some refactoring for future changes.

Test: ./ravenwood/scripts/run-ravenwood-tests.sh
Bug: 292141694
Change-Id: I6e2fd389ef63d31472f5eafcd9a58ac9e52e8117
parent da767359
Loading
Loading
Loading
Loading
+47 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.platform.test.ravenwood.bivalenttest;

import static org.junit.Assert.assertEquals;

import android.util.ArrayMap;
import android.util.Size;

import androidx.test.ext.junit.runners.AndroidJUnit4;

import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.Map;

// Tests for calling simple Android APIs.
@RunWith(AndroidJUnit4.class)
public class RavenwoodAndroidApiTest {
    @Test
    public void testArrayMapSimple() {
        final Map<String, String> map = new ArrayMap<>();

        map.put("key1", "value1");
        assertEquals("value1", map.get("key1"));
    }

    @Test
    public void testSizeSimple() {
        final var size = new Size(1, 2);

        assertEquals(2, size.getHeight());
    }
}
+39 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.platform.test.ravenwood.bivalenttest;

import android.platform.test.annotations.DisabledOnRavenwood;
import android.platform.test.ravenwood.RavenwoodClassRule;
import android.platform.test.ravenwood.RavenwoodRule;

import androidx.test.ext.junit.runners.AndroidJUnit4;

import org.junit.Assert;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4.class)
@DisabledOnRavenwood
public class RavenwoodClassRuleDeviceOnlyTest {
    @ClassRule
    public static final RavenwoodClassRule sRavenwood = new RavenwoodClassRule();

    @Test
    public void testDeviceOnly() {
        Assert.assertFalse(RavenwoodRule.isOnRavenwood());
    }
}
+43 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.platform.test.ravenwood.bivalenttest;

import android.platform.test.ravenwood.RavenwoodClassRule;
import android.platform.test.ravenwood.RavenwoodRule;

import androidx.test.ext.junit.runners.AndroidJUnit4;

import org.junit.Assert;
import org.junit.ClassRule;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4.class)
// TODO: atest RavenwoodBivalentTest_device fails with the following message.
// `RUNNER ERROR: Instrumentation reported numtests=7 but only ran 6`
// @android.platform.test.annotations.DisabledOnNonRavenwood
// Figure it out and then make DisabledOnNonRavenwood support TYPEs as well.
@Ignore
public class RavenwoodClassRuleRavenwoodOnlyTest {
    @ClassRule
    public static final RavenwoodClassRule sRavenwood = new RavenwoodClassRule();

    @Test
    public void testRavenwoodOnly() {
        Assert.assertTrue(RavenwoodRule.isOnRavenwood());
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ public class RavenwoodTestRunnerValidationTest {
    public final RuleChain chain = RuleChain.outerRule(mThrown).around(mRavenwood);

    public RavenwoodTestRunnerValidationTest() {
        Assume.assumeTrue(mRavenwood._ravenwood_private$isOptionalValidationEnabled());
        Assume.assumeTrue(RavenwoodRule._$RavenwoodPrivate.isOptionalValidationEnabled());
        // Because RavenwoodRule will throw this error before executing the test method,
        // we can't do it in the test method itself.
        // So instead, we initialize it here.
+5 −1
Original line number Diff line number Diff line
@@ -31,13 +31,17 @@ import java.lang.annotation.Target;
 * which means if a test class has this annotation, you can't negate it in subclasses or
 * on a per-method basis.
 *
 * THIS ANNOTATION CANNOT BE ADDED TO CLASSES AT THIS PONINT.
 * See {@link com.android.platform.test.ravenwood.bivalenttest.RavenwoodClassRuleRavenwoodOnlyTest}
 * for the reason.
 *
 * The {@code RAVENWOOD_RUN_DISABLED_TESTS} environmental variable won't work because it won't be
 * propagated to the device. (We may support it in the future, possibly using a debug. sysprop.)
 *
 * @hide
 */
@Inherited
@Target({ElementType.METHOD, ElementType.TYPE})
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface DisabledOnNonRavenwood {
    /**
Loading