import java.util.Collection ;
import java.util.List ;
import java.util.function.Supplier ;
class Should {
if ( ! expected.equals ( given) ) {
throw new RuntimeException ( "equality failed. expected " + expected
+ ", but given " + given
) ; }
}
}
// ----------------------------------------------------------------
class A {
return "A" ;
}
}
class ASpec {
void runAll( Collection< Supplier<? extends A>> implementations) {
implementations.forEach ( this :: run) ;
}
void run( Supplier<? extends A> impl) {
should_be_A_object_description( impl.get ( ) ) ;
}
private String descriptionOf
( A a
) { return a.getClass ( ) .getSimpleName ( ) ;
}
void should_be_A_object_description( A a) {
final var expected = descriptionOf( a) ;
Should.beEqual ( expected, a.description ( 42 ) ) ;
}
}
class B extends A {
return "B" ;
}
}
final class Ideone {
public static void main
( String [ ] args
) { new ASpec
( ) .
runAll ( List .
of ( A
:: new , B
:: new ) ) ; }
}
aW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwppbXBvcnQgamF2YS51dGlsLkxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uU3VwcGxpZXI7CgpjbGFzcyBTaG91bGQgewoKICAgIHN0YXRpYyB2b2lkIGJlRXF1YWwoT2JqZWN0IGV4cGVjdGVkLCBPYmplY3QgZ2l2ZW4pIHsKICAgICAgICBpZiAoIWV4cGVjdGVkLmVxdWFscyhnaXZlbikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImVxdWFsaXR5IGZhaWxlZC4gZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIiwgYnV0IGdpdmVuICIgKyBnaXZlbik7CiAgICAgICAgfQogICAgfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpjbGFzcyBBIHsKCiAgICBTdHJpbmcgZGVzY3JpcHRpb24oaW50IHgpIHsKICAgICAgICByZXR1cm4gIkEiOwogICAgfQp9CgpjbGFzcyBBU3BlYyB7CgogICAgdm9pZCBydW5BbGwoQ29sbGVjdGlvbjxTdXBwbGllcjw/IGV4dGVuZHMgQT4+IGltcGxlbWVudGF0aW9ucykgewogICAgICAgIGltcGxlbWVudGF0aW9ucy5mb3JFYWNoKHRoaXM6OnJ1bik7CiAgICB9CgogICAgdm9pZCBydW4oU3VwcGxpZXI8PyBleHRlbmRzIEE+IGltcGwpIHsKICAgICAgICBzaG91bGRfYmVfQV9vYmplY3RfZGVzY3JpcHRpb24oaW1wbC5nZXQoKSk7CiAgICB9CgogICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb25PZihBIGEpIHsKICAgICAgICByZXR1cm4gYS5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKTsKICAgIH0KCiAgICB2b2lkIHNob3VsZF9iZV9BX29iamVjdF9kZXNjcmlwdGlvbihBIGEpIHsKICAgICAgICBmaW5hbCB2YXIgZXhwZWN0ZWQgPSBkZXNjcmlwdGlvbk9mKGEpOwogICAgICAgIFNob3VsZC5iZUVxdWFsKGV4cGVjdGVkLCBhLmRlc2NyaXB0aW9uKDQyKSk7CiAgICB9Cn0KCmNsYXNzIEIgZXh0ZW5kcyBBIHsKCiAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSB7CiAgICAgICAgcmV0dXJuICJCIjsKICAgIH0KfQoKZmluYWwgY2xhc3MgSWRlb25lIHsKCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgbmV3IEFTcGVjKCkucnVuQWxsKExpc3Qub2YoQTo6bmV3LCBCOjpuZXcpKTsKICAgIH0KfQo=