private ServerSocket connectToPort() throws Exception { ServerSocket result = new ServerSocket(0); LOG.info("Acquired port "+result+" for test "+JavaClassNames.niceClassAndMethod()); return result; }
/** can be overridden to supply a simpler base name than the class name */ protected String toStringBaseName() { return JavaClassNames.simpleClassName(this); } /** can be overridden to supply add'l info for the {@link #toString()}; subclasses can add to the returned value */
/** convenience for {@link #callerNiceClassAndMethod(int)} with depth 0 * <p> * useful for tests and other debug-facing log messages! */ public static String niceClassAndMethod() { return callerNiceClassAndMethod(0); }
/** returns nice class name and method for the caller, going up the stack (filtered to remove invocation etc), * with 0 typically being the context where this method is called, 1 being its caller, etc */ public static String callerNiceClassAndMethod(int depth) { return niceClassAndMethod(callerStackElement(depth)); }
/** as {@link #simpleClassName(Class)} but taking the type of the object if it is not already a class * or a type-token; callers should usually do the getClass themselves, unless they aren't sure whether * it is already a Class-type object */ public static String simpleClassName(Object x) { return simpleClassName(type(x)); }
/** as {@link #simpleClassName(Object)} but looking up the type if needed */ public static String superSimpleClassName(Object o) { return superSimpleClassName(type(o)); }
@Override public String toString() { return JavaClassNames.cleanSimpleClassName(this); } }
@Test public void testSimpleClassNames() { Assert.assertEquals(JavaClassNames.simpleClassName(this), "JavaClassNamesTest"); Assert.assertEquals(JavaClassNames.simpleClassName(JavaClassNames.class), JavaClassNames.class.getSimpleName()); Assert.assertEquals(JavaClassNames.simpleClassName(TypeToken.of(JavaClassNames.class)), JavaClassNames.class.getSimpleName()); Assert.assertEquals(JavaClassNames.simpleClassName(JavaClassNames.class.getSimpleName()), "String"); Assert.assertEquals(JavaClassNames.simplifyClassName(JavaClassNames.class.getSimpleName()), JavaClassNames.class.getSimpleName()); Assert.assertEquals(JavaClassNames.simpleClassName(1), "Integer"); Assert.assertEquals(JavaClassNames.simpleClassName(new String[][] { }), "String[][]"); // primitives? Assert.assertEquals(JavaClassNames.simpleClassName(new int[] { 1, 2, 3 }), "int[]"); // anonymous String anon1 = JavaClassNames.simpleClassName(new Object() {}); Assert.assertTrue(anon1.startsWith(JavaClassNamesTest.class.getName()+"$"), "anon class is: "+anon1); }
@SuppressWarnings("unchecked") private <T> T checkType(Object x, String description, Class<T> type) { if (type.isInstance(x)) return (T)x; throw new UserFacingException("Expected "+JavaClassNames.superSimpleClassName(type)+" for "+description+", not "+JavaClassNames.superSimpleClassName(x)); }
@Test public void testPackage() { Assert.assertEquals(JavaClassNames.packageName(JavaClassNamesTest.class), "org.apache.brooklyn.util.javalang"); Assert.assertEquals(JavaClassNames.packagePath(JavaClassNamesTest.class), "/org/apache/brooklyn/util/javalang/"); }
/** returns path relative to the package of x, unless path is absolute. * useful to mimic Class.getResource(path) behaviour, cf Class.resolveName where the first argument below is the class. */ public static String resolveName(Object context, String path) { Preconditions.checkNotNull(path, "path must not be null"); if (path.startsWith("/") || Urls.isUrlWithProtocol(path)) return path; Preconditions.checkNotNull(context, "context must not be null when path is relative"); return packagePath(context)+path; }
@Override protected String newTempPersistenceContainerName() { return "test-"+JavaClassNames.callerStackElement(0).getClassName()+"-"+Identifiers.makeRandomId(4); }
@Override public String toString() { return JavaClassNames.cleanSimpleClassName(this)+"["+JavaClassNames.cleanSimpleClassName(type)+" "+value+"]"; } }
@Test public void testSuperSimpleClassNames() { Assert.assertEquals(JavaClassNames.superSimpleClassName(this), "JavaClassNamesTest"); Assert.assertEquals(JavaClassNames.superSimpleClassName(1), "number"); Assert.assertEquals(JavaClassNames.superSimpleClassName(true), "boolean"); Assert.assertEquals(JavaClassNames.superSimpleClassName("hello world"), "string"); Assert.assertEquals(JavaClassNames.superSimpleClassName(new String[][] { }), "list"); Assert.assertEquals(JavaClassNames.superSimpleClassName(new int[] { 1, 2, 3 }), "list"); Assert.assertEquals(JavaClassNames.superSimpleClassName(MutableMap.of("key", "val")), "map"); Assert.assertEquals(JavaClassNames.superSimpleClassName(MutableMap.of()), "map"); Assert.assertEquals(JavaClassNames.superSimpleClassName(MutableList.of()), "list"); }
@Test public void testCallerIsMe() { String result = JavaClassNames.niceClassAndMethod(); Assert.assertEquals(result, "JavaClassNamesCallerTest.testCallerIsMe"); }
@Override public String toString() { return JavaClassNames.simpleClassName(this)+":"+delegate.toString(); } }
@Override public String toString() { return JavaClassNames.cleanSimpleClassName(this)+"["+kind+","+expectedSuperType+","+encounteredTypes+"]"; } }
public void other() { String result = JavaClassNames.callerNiceClassAndMethod(1); Assert.assertEquals(result, "JavaClassNamesCallerTest.testCallerIsYou"); }
result.services.add(Service.of((Map<String,Object>) service)); } else { throw new UserFacingException("Services list should have a map for each entry, not "+JavaClassNames.superSimpleClassName(service)); throw new UserFacingException("Services block should be a list, not "+JavaClassNames.superSimpleClassName(services)); result.artifacts.add(Artifact.of((Map<String,Object>) artifact)); } else { throw new UserFacingException("Artifacts list should contain map items, not "+JavaClassNames.superSimpleClassName(artifact)); throw new UserFacingException("Artifacts block should contain a list, not "+JavaClassNames.superSimpleClassName(artifacts));
@Test(groups={"Longevity","Acceptance"}) public void testLocationCreatedAndUnmanaged() throws Exception { doTestManyTimesAndAssertNoMemoryLeak(JavaClassNames.niceClassAndMethod(), new Runnable() { @Override public void run() { loc = newLoc(); managementContext.getLocationManager().unmanage(loc); } }); }