/** * Register an implementation * * @param string algorithm * @param lang.XPClass<security.checksum.MessageDigestImpl> class * @throws lang.IllegalArgumentException */ public static function register($algorithm, \lang\XPClass $impl) { if (!$impl->isSubclassOf('security.checksum.MessageDigestImpl')) { throw new \lang\IllegalArgumentException('Implementation class must be a security.checksum.MessageDigestImpl'); } self::$implementations[$algorithm] = $impl; }
/** * Register an algorithm * * @param string name * @param lang.XPClass<security.password.Algorithm> impl * @throws lang.IllegalArgumentException in case the given class is not an Algorithm */ public static function setAlgorithm($name, \lang\XPClass $impl) { if (!$impl->isSubclassOf('security.password.Algorithm')) { throw new \lang\IllegalArgumentException('Given argument is not an Algorithm class (' . \xp::stringOf($impl) . ')'); } self::$algorithms[$name] = $impl; }
/** * Register transport implementation for a specific scheme * * @param string scheme * @param lang.XPClass<peer.http.HttpTransport> class */ public static function register($scheme, XPClass $class) { if (!$class->isSubclassOf('peer.http.HttpTransport')) { throw new \lang\IllegalArgumentException(sprintf('Given argument must be lang.XPClass<peer.http.HttpTransport>, %s given', $class->toString())); } self::$transports[$scheme] = $class; }
/** * Get all test cases * * @param lang.XPClass class * @param var[] arguments * @return unittest.TestCase[] */ public function testCasesInClass(\lang\XPClass $class, $arguments = null) { // Verify we were actually given a testcase class if (!$class->isSubclassOf('unittest.TestCase')) { throw new \lang\IllegalArgumentException('Given argument is not a TestCase class (' . \xp::stringOf($class) . ')'); } // Add all tests cases $r = []; foreach ($class->getMethods() as $m) { $m->hasAnnotation('test') && ($r[] = $class->getConstructor()->newInstance(array_merge((array) $m->getName(true), (array) $arguments))); } // Verify we actually added tests by doing this. if (empty($r)) { throw new \util\NoSuchElementException('No tests found in ' . $class->getName()); } return $r; }
/** * Register a driver * * Usage: * <code> * DriverManager::register('mydb', XPClass::forName('my.db.Connection')); * // [...] * $conn= DriverManager::getConnection('mydb://...'); * </code> * * @param string name identifier * @param lang.XPClass<rdbms.DBConnection> class * @throws lang.IllegalArgumentException in case an incorrect class is given */ public static function register($name, \lang\XPClass $class) { if (!$class->isSubclassOf('rdbms.DBConnection')) { throw new \lang\IllegalArgumentException(sprintf('Given argument must be lang.XPClass<rdbms.DBConnection>, %s given', $class->toString())); } self::$instance->drivers[$name] = $class; self::$instance->lookup = []; }