| Index: base/test/android/junit/src/org/chromium/base/test/TestListInstrumentationRunListenerTest.java
 | 
| diff --git a/base/test/android/junit/src/org/chromium/base/test/TestListInstrumentationRunListenerTest.java b/base/test/android/junit/src/org/chromium/base/test/TestListInstrumentationRunListenerTest.java
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..da6e4df132b0aea7135ea3fe58c6f3aea1d7736e
 | 
| --- /dev/null
 | 
| +++ b/base/test/android/junit/src/org/chromium/base/test/TestListInstrumentationRunListenerTest.java
 | 
| @@ -0,0 +1,120 @@
 | 
| +// Copyright 2017 The Chromium Authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
| +
 | 
| +package org.chromium.base.test;
 | 
| +
 | 
| +import static org.chromium.base.test.TestListInstrumentationRunListener.getAnnotationJSON;
 | 
| +import static org.chromium.base.test.TestListInstrumentationRunListener.getTestMethodJSON;
 | 
| +
 | 
| +import org.json.JSONObject;
 | 
| +import org.junit.Assert;
 | 
| +import org.junit.Test;
 | 
| +import org.junit.runner.Description;
 | 
| +import org.junit.runner.RunWith;
 | 
| +import org.robolectric.annotation.Config;
 | 
| +
 | 
| +import org.chromium.base.test.util.CommandLineFlags;
 | 
| +import org.chromium.testing.local.LocalRobolectricTestRunner;
 | 
| +
 | 
| +import java.util.Arrays;
 | 
| +
 | 
| +/**
 | 
| + * Robolectric test to ensure static methods in TestListInstrumentationRunListener works properly.
 | 
| + */
 | 
| +@RunWith(LocalRobolectricTestRunner.class)
 | 
| +@Config(manifest = Config.NONE)
 | 
| +public class TestListInstrumentationRunListenerTest {
 | 
| +    @CommandLineFlags.Add("hello")
 | 
| +    private static class ParentClass {
 | 
| +        public void testA() {}
 | 
| +
 | 
| +        @CommandLineFlags.Add("world")
 | 
| +        public void testB() {}
 | 
| +    }
 | 
| +
 | 
| +    @CommandLineFlags.Remove("hello")
 | 
| +    private static class ChildClass extends ParentClass {
 | 
| +    }
 | 
| +
 | 
| +    @Test
 | 
| +    public void testGetTestMethodJSON_testA() throws Throwable {
 | 
| +        Description desc = Description.createTestDescription(
 | 
| +                ParentClass.class, "testA",
 | 
| +                ParentClass.class.getMethod("testA").getAnnotations());
 | 
| +        JSONObject json = getTestMethodJSON(desc);
 | 
| +        String expectedJsonString =
 | 
| +                "{"
 | 
| +                + "'method': 'testA',"
 | 
| +                + "'annotations': {}"
 | 
| +                + "}";
 | 
| +        expectedJsonString = expectedJsonString
 | 
| +            .replaceAll("\\s", "")
 | 
| +            .replaceAll("'", "\"");
 | 
| +        Assert.assertEquals(expectedJsonString, json.toString());
 | 
| +    }
 | 
| +
 | 
| +    @Test
 | 
| +    public void testGetTestMethodJSON_testB() throws Throwable {
 | 
| +        Description desc = Description.createTestDescription(
 | 
| +                ParentClass.class, "testB",
 | 
| +                ParentClass.class.getMethod("testB").getAnnotations());
 | 
| +        JSONObject json = getTestMethodJSON(desc);
 | 
| +        String expectedJsonString =
 | 
| +                "{"
 | 
| +                + "'method': 'testB',"
 | 
| +                + "'annotations': {"
 | 
| +                + "  'Add': {"
 | 
| +                + "    'value': ['world']"
 | 
| +                + "    }"
 | 
| +                + "  }"
 | 
| +                + "}";
 | 
| +        expectedJsonString = expectedJsonString
 | 
| +            .replaceAll("\\s", "")
 | 
| +            .replaceAll("'", "\"");
 | 
| +        Assert.assertEquals(expectedJsonString, json.toString());
 | 
| +    }
 | 
| +
 | 
| +
 | 
| +    @Test
 | 
| +    public void testGetTestMethodJSONForInheritedClass() throws Throwable {
 | 
| +        Description desc = Description.createTestDescription(
 | 
| +                ChildClass.class, "testB",
 | 
| +                ChildClass.class.getMethod("testB").getAnnotations());
 | 
| +        JSONObject json = getTestMethodJSON(desc);
 | 
| +        String expectedJsonString =
 | 
| +                "{"
 | 
| +                + "'method': 'testB',"
 | 
| +                + "'annotations': {"
 | 
| +                + "  'Add': {"
 | 
| +                + "    'value': ['world']"
 | 
| +                + "    }"
 | 
| +                + "  }"
 | 
| +                + "}";
 | 
| +        expectedJsonString = expectedJsonString
 | 
| +            .replaceAll("\\s", "")
 | 
| +            .replaceAll("'", "\"");
 | 
| +        Assert.assertEquals(expectedJsonString, json.toString());
 | 
| +    }
 | 
| +
 | 
| +    @Test
 | 
| +    public void testGetAnnotationJSONForParentClass() throws Throwable {
 | 
| +        JSONObject json = getAnnotationJSON(Arrays.asList(ParentClass.class.getAnnotations()));
 | 
| +        String expectedJsonString = "{'Add':{'value':['hello']}}";
 | 
| +        expectedJsonString = expectedJsonString
 | 
| +            .replaceAll("\\s", "")
 | 
| +            .replaceAll("'", "\"");
 | 
| +        Assert.assertEquals(expectedJsonString, json.toString());
 | 
| +    }
 | 
| +
 | 
| +    @Test
 | 
| +    public void testGetAnnotationJSONForChildClass() throws Throwable {
 | 
| +        JSONObject json = getAnnotationJSON(Arrays.asList(ChildClass.class.getAnnotations()));
 | 
| +        String expectedJsonString = "{'Add':{'value':['hello']},'Remove':{'value':['hello']}}";
 | 
| +        expectedJsonString = expectedJsonString
 | 
| +            .replaceAll("\\s", "")
 | 
| +            .replaceAll("'", "\"");
 | 
| +        Assert.assertEquals(expectedJsonString, json.toString());
 | 
| +    }
 | 
| +}
 | 
| +
 | 
| 
 |