function test_depth() { $pagelist = new PluginSonotsPagelist($this->pages); $pagelist->gen_metas('depth'); $depths = $pagelist->get_metas('depth'); $truth = array(0 => 1, 1 => 2, 2 => 3, 3 => 4, 4 => 4, 5 => 4); $this->assertTrue($depths, $truth); // do not use negative interval for depth $depth = PluginSonotsOption::parse_interval('2:3'); list($offset, $length) = $depth; list($min, $max) = PluginSonotsOption::conv_interval(array($offset, $length), array(1, PHP_INT_MAX)); $pagelist->grep_by('depth', 'ge', $min); $pagelist->grep_by('depth', 'le', $max); $pages = $pagelist->get_metas('page'); $truth = array(1 => 'test/a', 2 => 'test/a/aa'); $this->assertTrue($pages, $truth); // depth measures relname $pagelist = new PluginSonotsPagelist($this->pages); $prefix = 'test/a/'; $pagelist->grep_by('page', 'prefix', $prefix); $pagelist->gen_metas('relname', array(sonots::get_dirname($prefix))); $pagelist->gen_metas('depth'); $depths = $pagelist->get_metas('depth'); $truth = array(2 => 1, 3 => 2, 4 => 2); $this->assertTrue($depths, $truth); }
function test_parse_interval() { $this->assertEqual(PluginSonotsOption::parse_interval('1:5', 1), array(0, 5)); $this->assertEqual(PluginSonotsOption::parse_interval('1:5', 0), array(1, 5)); $this->assertEqual(PluginSonotsOption::parse_interval('0:4', 0), array(0, 5)); $this->assertEqual(PluginSonotsOption::parse_interval('0:4', 1), array(0, 5)); // may change behavior $this->assertEqual(PluginSonotsOption::parse_interval('2:3'), array(1, 2)); $this->assertEqual(PluginSonotsOption::parse_interval('2:'), array(1, null)); $this->assertEqual(PluginSonotsOption::parse_interval(':3'), array(0, 3)); $this->assertEqual(PluginSonotsOption::parse_interval('4'), array(3, 1)); $this->assertEqual(PluginSonotsOption::parse_interval('-5:', 0), array(-5, null)); $this->assertEqual(PluginSonotsOption::parse_interval('-5:', 1), array(-5, null)); $this->assertEqual(PluginSonotsOption::parse_interval(':-5'), array(0, -4)); $this->assertEqual(PluginSonotsOption::parse_interval('1+2'), array(0, 3)); }
/** * Evaluate an option * * Lists of Supported Types) * - bool : boolean true or false * - string : string * - array : array * - enum : take only one element of possible values * - enumarray : take only elements in possible values * - number : number * - interval : interval string. See parse_interval for details * - options : options * * @access private * @static * @param mixed $val option value. * @param string $type option type * @param mixed $conf config. See evaluate_options. * @return array array(evaluated value, invalid value) * @uses parse_interval * @uses evaluate_options * @version $Id: v 1.7 2008-07-30 11:14:46 sonots $ * @since v 1.0 */ function evaluate_option($val, $type, $conf = null) { if (is_null($val)) { return array(null, null); } $retval = $unknown = null; switch ($type) { case 'bool': if ($val === true && is_bool($conf)) { $retval = $conf; break; } if ($val === false || $val === '0' || $val === 'off' || $val === 'false' || $val === 'FALSE') { $retval = false; } elseif ($val === true || $val === '' || $val === '1' || $val === 'on' || $val === 'true' || $val === 'TRUE') { $retval = true; } else { $unknown = $val; } break; case 'string': if ($val === true) { // no "=value" option is set to true at parse_option_line $retval = is_string($conf) ? $conf : null; break; } if (is_string($val)) { $retval = $val; } else { $unknown = $val; } break; case 'array': if ($val === true) { // no "=value" option is set to true at parse_option_line $retval = is_array($conf) ? $conf : null; break; } $retval = PluginSonotsOption::boolean_to_numeric((array) $val); break; case 'enum': if ($val === true) { $retval = is_array($conf) ? reset($conf) : null; break; } if (in_array($val, $conf)) { $retval = $val; } else { $unknown = $val; } break; case 'enumarray': // special array type if ($val === true) { $retval = is_array($conf) ? $conf : null; break; } $retval = array(); $unknown = array(); $val = PluginSonotsOption::boolean_to_numeric((array) $val); foreach ($val as $elem) { if (in_array($elem, $conf)) { $retval[] = $elem; } else { $unknown[] = $elem; } } if (empty($retval)) { $retval = null; } if (empty($unknown)) { $unknown = null; } break; case 'options': if ($val === true) { $val = array(); } list($retval, $unknown) = PluginSonotsOption::evaluate_options($val, $conf); if (empty($retval)) { $retval = null; } if (empty($unknown)) { $unknown = null; } break; case 'number': if ($val === true) { $retval = is_int($conf) || is_float($conf) ? $conf : null; break; } if (is_numeric($val)) { $retval = $val; } else { $unknown = $val; } break; case 'interval': // $conf is default2 or array(default2, start) if ($val === true) { $val = is_array($conf) ? $conf[0] : $conf; } $start = is_array($conf) ? $conf[1] : 1; $retval = PluginSonotsOption::parse_interval($val, $start); if (is_null($retval)) { $unknown = $val; } break; default: $unknown = $val; break; } return array($retval, $unknown); }