### Question:
ExtensionManager { public static <T> Iterable<T> get(final String type) { return SNAPSHOT.getExtensions(type); }  static T getExtension(final String type, final M name); static T getExtension(final Class<T> extensible, final M name); static T getOrLoadExtension(final Class<T> extensible, final M name); static T getOrLoadExtension(final Class<T> extensible); static Iterable<T> getExtensions(final Class<T> extensible); static Iterable<T> getOrLoadExtensions(final Class<T> extensible); static Iterable<T> get(final String type); static ExtensionPoint<T, M> getOrLoadExtensionPoint(final Class<T> extensible); static ExtensionPoint<T, M> getOrLoadExtensionPoint(final Class<T> extensible, final ExtensionLoader loader); static ExtensionPoint<T, M> getOrLoadExtensionPoint(final Class<T> extensible,
                                                                      final Comparator<ExtensionMeta<?, ?>> comparator); static ExtensionPoint<T, M> getOrLoadExtensionPoint(final Class<T> extensible,
                                                                      final ExtensionLoader loader,
                                                                      final Comparator<ExtensionMeta<?, ?>> comparator); static ExtensionPoint<T, M> getOrLoadExtensionPoint(final Class<T> extensible,
                                                                      final ExtensionLoader loader,
                                                                      final Comparator<ExtensionMeta<?, ?>> comparator,
                                                                      final Classify<T, M> classify); static void loadExtension(final Collection<Class<?>> extensibles); static void loadExtension(final Collection<Class<?>> extensibles, final ExtensionLoader loader); static void loadExtension(final ExtensionScanner scanner); static void loadExtension(final ExtensionScanner scanner, final ExtensionLoader loader); synchronized static void register(final ExtensionLoader loader); synchronized static void deregister(final ExtensionLoader loader); static boolean addListener(final ExtensionListener listener);  }### Answer:
@Test public void testGet() { ExtensionManager.getOrLoadExtensionPoint(Consumer.class); Consumer c1 = ExtensionManager.getExtension(Consumer.class, "myConsumer@test"); Consumer c2 = ExtensionManager.getExtension(Consumer.class, "myConsumer"); Consumer c3 = ExtensionManager.getExtension("consumer", "myConsumer@test"); Assert.assertNotNull(c1); Assert.assertEquals(c1, c2); Assert.assertEquals(c1, c3); }
@Test public void testLazy() { ExtensionPoint<Consumer, String> sp1 = new ExtensionPointLazy(Consumer.class); ExtensionPoint<Consumer, String> sp2 = new ExtensionPointLazy(Consumer.class); Consumer c1 = sp1.get(); Consumer c2 = sp2.get(); Assert.assertNotNull(c1); Assert.assertEquals(c1, sp1.get()); Assert.assertEquals(c1, c2); Assert.assertEquals(sp1.extensions(), sp2.extensions()); }