| Index: third_party/protobuf/java/core/src/test/java/com/google/protobuf/ExtensionRegistryFactoryTest.java
|
| diff --git a/third_party/protobuf/java/core/src/test/java/com/google/protobuf/ExtensionRegistryFactoryTest.java b/third_party/protobuf/java/core/src/test/java/com/google/protobuf/ExtensionRegistryFactoryTest.java
|
| deleted file mode 100644
|
| index 6157e58966bca23edfa1065072997804ed13e32a..0000000000000000000000000000000000000000
|
| --- a/third_party/protobuf/java/core/src/test/java/com/google/protobuf/ExtensionRegistryFactoryTest.java
|
| +++ /dev/null
|
| @@ -1,276 +0,0 @@
|
| -// Protocol Buffers - Google's data interchange format
|
| -// Copyright 2008 Google Inc. All rights reserved.
|
| -// https://developers.google.com/protocol-buffers/
|
| -//
|
| -// Redistribution and use in source and binary forms, with or without
|
| -// modification, are permitted provided that the following conditions are
|
| -// met:
|
| -//
|
| -// * Redistributions of source code must retain the above copyright
|
| -// notice, this list of conditions and the following disclaimer.
|
| -// * Redistributions in binary form must reproduce the above
|
| -// copyright notice, this list of conditions and the following disclaimer
|
| -// in the documentation and/or other materials provided with the
|
| -// distribution.
|
| -// * Neither the name of Google Inc. nor the names of its
|
| -// contributors may be used to endorse or promote products derived from
|
| -// this software without specific prior written permission.
|
| -//
|
| -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| -
|
| -package com.google.protobuf;
|
| -
|
| -import protobuf_unittest.NonNestedExtension;
|
| -import protobuf_unittest.NonNestedExtensionLite;
|
| -import java.lang.reflect.Method;
|
| -import java.net.URLClassLoader;
|
| -import java.util.Arrays;
|
| -import java.util.Collections;
|
| -import java.util.HashSet;
|
| -import java.util.Set;
|
| -import junit.framework.Test;
|
| -import junit.framework.TestCase;
|
| -import junit.framework.TestSuite;
|
| -
|
| -/**
|
| - * Tests for {@link ExtensionRegistryFactory} and the {@link ExtensionRegistry} instances it
|
| - * creates.
|
| - *
|
| - * <p>This test simulates the runtime behaviour of the ExtensionRegistryFactory by delegating test
|
| - * definitions to two inner classes {@link InnerTest} and {@link InnerLiteTest}, the latter of
|
| - * which is executed using a custom ClassLoader, simulating the ProtoLite environment.
|
| - *
|
| - * <p>The test mechanism employed here is based on the pattern in
|
| - * {@code com.google.common.util.concurrent.AbstractFutureFallbackAtomicHelperTest}
|
| - */
|
| -public class ExtensionRegistryFactoryTest extends TestCase {
|
| -
|
| - // A classloader which blacklists some non-Lite classes.
|
| - private static final ClassLoader LITE_CLASS_LOADER = getLiteOnlyClassLoader();
|
| -
|
| - /**
|
| - * Defines the set of test methods which will be run.
|
| - */
|
| - static interface RegistryTests {
|
| - void testCreate();
|
| - void testEmpty();
|
| - void testIsFullRegistry();
|
| - void testAdd();
|
| - void testAdd_immutable();
|
| - }
|
| -
|
| - /**
|
| - * Test implementations for the non-Lite usage of ExtensionRegistryFactory.
|
| - */
|
| - public static class InnerTest implements RegistryTests {
|
| -
|
| - @Override
|
| - public void testCreate() {
|
| - ExtensionRegistryLite registry = ExtensionRegistryFactory.create();
|
| -
|
| - assertEquals(registry.getClass(), ExtensionRegistry.class);
|
| - }
|
| -
|
| - @Override
|
| - public void testEmpty() {
|
| - ExtensionRegistryLite emptyRegistry = ExtensionRegistryFactory.createEmpty();
|
| -
|
| - assertEquals(emptyRegistry.getClass(), ExtensionRegistry.class);
|
| - assertEquals(emptyRegistry, ExtensionRegistry.EMPTY_REGISTRY);
|
| - }
|
| -
|
| - @Override
|
| - public void testIsFullRegistry() {
|
| - ExtensionRegistryLite registry = ExtensionRegistryFactory.create();
|
| - assertTrue(ExtensionRegistryFactory.isFullRegistry(registry));
|
| - }
|
| -
|
| - @Override
|
| - public void testAdd() {
|
| - ExtensionRegistryLite registry1 = ExtensionRegistryLite.newInstance();
|
| - NonNestedExtensionLite.registerAllExtensions(registry1);
|
| - registry1.add(NonNestedExtensionLite.nonNestedExtensionLite);
|
| -
|
| - ExtensionRegistryLite registry2 = ExtensionRegistryLite.newInstance();
|
| - NonNestedExtension.registerAllExtensions((ExtensionRegistry) registry2);
|
| - registry2.add(NonNestedExtension.nonNestedExtension);
|
| -
|
| - ExtensionRegistry fullRegistry1 = (ExtensionRegistry) registry1;
|
| - ExtensionRegistry fullRegistry2 = (ExtensionRegistry) registry2;
|
| -
|
| - assertTrue("Test is using a non-lite extension",
|
| - GeneratedMessageLite.GeneratedExtension.class.isAssignableFrom(
|
| - NonNestedExtensionLite.nonNestedExtensionLite.getClass()));
|
| - assertNull("Extension is not registered in masqueraded full registry",
|
| - fullRegistry1.findImmutableExtensionByName("protobuf_unittest.nonNestedExtension"));
|
| - GeneratedMessageLite.GeneratedExtension<NonNestedExtensionLite.MessageLiteToBeExtended, ?>
|
| - extension = registry1.findLiteExtensionByNumber(
|
| - NonNestedExtensionLite.MessageLiteToBeExtended.getDefaultInstance(), 1);
|
| - assertNotNull("Extension registered in lite registry", extension);
|
| -
|
| - assertTrue("Test is using a non-lite extension",
|
| - GeneratedMessage.GeneratedExtension.class.isAssignableFrom(
|
| - NonNestedExtension.nonNestedExtension.getClass()));
|
| - assertNotNull("Extension is registered in masqueraded full registry",
|
| - fullRegistry2.findImmutableExtensionByName("protobuf_unittest.nonNestedExtension"));
|
| - }
|
| -
|
| - @Override
|
| - public void testAdd_immutable() {
|
| - ExtensionRegistryLite registry1 = ExtensionRegistryLite.newInstance().getUnmodifiable();
|
| - try {
|
| - NonNestedExtensionLite.registerAllExtensions(registry1);
|
| - fail();
|
| - } catch (UnsupportedOperationException expected) {}
|
| - try {
|
| - registry1.add(NonNestedExtensionLite.nonNestedExtensionLite);
|
| - fail();
|
| - } catch (UnsupportedOperationException expected) {}
|
| -
|
| - ExtensionRegistryLite registry2 = ExtensionRegistryLite.newInstance().getUnmodifiable();
|
| - try {
|
| - NonNestedExtension.registerAllExtensions((ExtensionRegistry) registry2);
|
| - fail();
|
| - } catch (IllegalArgumentException expected) {}
|
| - try {
|
| - registry2.add(NonNestedExtension.nonNestedExtension);
|
| - fail();
|
| - } catch (IllegalArgumentException expected) {}
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Test implementations for the Lite usage of ExtensionRegistryFactory.
|
| - */
|
| - public static final class InnerLiteTest implements RegistryTests {
|
| -
|
| - @Override
|
| - public void testCreate() {
|
| - ExtensionRegistryLite registry = ExtensionRegistryFactory.create();
|
| -
|
| - assertEquals(registry.getClass(), ExtensionRegistryLite.class);
|
| - }
|
| -
|
| - @Override
|
| - public void testEmpty() {
|
| - ExtensionRegistryLite emptyRegistry = ExtensionRegistryFactory.createEmpty();
|
| -
|
| - assertEquals(emptyRegistry.getClass(), ExtensionRegistryLite.class);
|
| - assertEquals(emptyRegistry, ExtensionRegistryLite.EMPTY_REGISTRY_LITE);
|
| - }
|
| -
|
| - @Override
|
| - public void testIsFullRegistry() {
|
| - ExtensionRegistryLite registry = ExtensionRegistryFactory.create();
|
| - assertFalse(ExtensionRegistryFactory.isFullRegistry(registry));
|
| - }
|
| -
|
| - @Override
|
| - public void testAdd() {
|
| - ExtensionRegistryLite registry = ExtensionRegistryLite.newInstance();
|
| - NonNestedExtensionLite.registerAllExtensions(registry);
|
| - GeneratedMessageLite.GeneratedExtension<NonNestedExtensionLite.MessageLiteToBeExtended, ?>
|
| - extension = registry.findLiteExtensionByNumber(
|
| - NonNestedExtensionLite.MessageLiteToBeExtended.getDefaultInstance(), 1);
|
| - assertNotNull("Extension is registered in Lite registry", extension);
|
| - }
|
| -
|
| - @Override
|
| - public void testAdd_immutable() {
|
| - ExtensionRegistryLite registry = ExtensionRegistryLite.newInstance().getUnmodifiable();
|
| - try {
|
| - NonNestedExtensionLite.registerAllExtensions(registry);
|
| - fail();
|
| - } catch (UnsupportedOperationException expected) {}
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Defines a suite of tests which the JUnit3 runner retrieves by reflection.
|
| - */
|
| - public static Test suite() {
|
| - TestSuite suite = new TestSuite();
|
| - for (Method method : RegistryTests.class.getMethods()) {
|
| - suite.addTest(TestSuite.createTest(ExtensionRegistryFactoryTest.class, method.getName()));
|
| - }
|
| - return suite;
|
| - }
|
| -
|
| - /**
|
| - * Sequentially runs first the Lite and then the non-Lite test variant via classloader
|
| - * manipulation.
|
| - */
|
| - @Override
|
| - public void runTest() throws Exception {
|
| - ClassLoader storedClassLoader = Thread.currentThread().getContextClassLoader();
|
| - Thread.currentThread().setContextClassLoader(LITE_CLASS_LOADER);
|
| - try {
|
| - runTestMethod(LITE_CLASS_LOADER, InnerLiteTest.class);
|
| - } finally {
|
| - Thread.currentThread().setContextClassLoader(storedClassLoader);
|
| - }
|
| - try {
|
| - runTestMethod(storedClassLoader, InnerTest.class);
|
| - } finally {
|
| - Thread.currentThread().setContextClassLoader(storedClassLoader);
|
| - }
|
| - }
|
| -
|
| - private void runTestMethod(ClassLoader classLoader, Class<? extends RegistryTests> testClass)
|
| - throws Exception {
|
| - classLoader.loadClass(ExtensionRegistryFactory.class.getName());
|
| - Class<?> test = classLoader.loadClass(testClass.getName());
|
| - String testName = getName();
|
| - test.getMethod(testName).invoke(test.newInstance());
|
| - }
|
| -
|
| - /**
|
| - * Constructs a custom ClassLoader blacklisting the classes which are inspected in the SUT
|
| - * to determine the Lite/non-Lite runtime.
|
| - */
|
| - private static ClassLoader getLiteOnlyClassLoader() {
|
| - ClassLoader testClassLoader = ExtensionRegistryFactoryTest.class.getClassLoader();
|
| - final Set<String> classNamesNotInLite =
|
| - Collections.unmodifiableSet(
|
| - new HashSet<String>(
|
| - Arrays.asList(
|
| - ExtensionRegistryFactory.FULL_REGISTRY_CLASS_NAME,
|
| - ExtensionRegistry.EXTENSION_CLASS_NAME)));
|
| -
|
| - // Construct a URLClassLoader delegating to the system ClassLoader, and looking up classes
|
| - // in jar files based on the URLs already configured for this test's UrlClassLoader.
|
| - // Certain classes throw a ClassNotFoundException by design.
|
| - return new URLClassLoader(((URLClassLoader) testClassLoader).getURLs(),
|
| - ClassLoader.getSystemClassLoader()) {
|
| - @Override
|
| - public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
|
| - if (classNamesNotInLite.contains(name)) {
|
| - throw new ClassNotFoundException("Class deliberately blacklisted by test.");
|
| - }
|
| - Class<?> loadedClass = null;
|
| - try {
|
| - loadedClass = findLoadedClass(name);
|
| - if (loadedClass == null) {
|
| - loadedClass = findClass(name);
|
| - if (resolve) {
|
| - resolveClass(loadedClass);
|
| - }
|
| - }
|
| - } catch (ClassNotFoundException e) {
|
| - loadedClass = super.loadClass(name, resolve);
|
| - }
|
| - return loadedClass;
|
| - }
|
| - };
|
| - }
|
| -}
|
|
|