/** * @covers PsStrings::replaceMap */ public function testReplaceMap() { $params['a'] = 1; $params['b'] = 2; $params['c'] = 3; $this->assertEquals(PsStrings::replaceMap('a+b=c', $params), '1+2=3'); $this->assertEquals(PsStrings::replaceMap('a+a=b', $params), '1+1=2'); $this->assertEquals(PsStrings::replaceMap('c-b=a', $params), '3-2=1'); $this->assertEquals(PsStrings::replaceMap('c-b=a|d', $params), '3-2=1|d'); $this->assertEquals(PsStrings::replaceMap('{a}+{b}={c}', $params, '{', '}'), '1+2=3'); $this->assertEquals(PsStrings::replaceMap('{a+{b={c', $params, '{'), '1+2=3'); $this->assertEquals(PsStrings::replaceMap('a}+b}=c}', $params, null, '}'), '1+2=3'); }
/** * Основной метод, выполняющий загрузку содержимого тестовой страницы */ private function getContentImpl(RequestArrayAdapter $params, Smarty $smarty) { //Силовые упражнения $exId = $params->int('ex_id'); if ($exId) { //$ex = GymManager::getInstance()->getExercise($exId); $tplPath = "gym/exercises/{$exId}.tpl"; return $smarty->templateExists($tplPath) ? $smarty->fetch($tplPath) : null; } //Специальные страницы $pageType = $params->str('pagetype'); if ($pageType) { $smParams = array(); switch ($pageType) { case 'smarty': foreach (array('blocks', 'functions', 'modifiers') as $type) { $items = DirManager::smarty('plugins/' . $type)->getDirContentFull(null, PsConst::EXT_PHP); /* @var $item DirItem */ foreach ($items as $item) { //Название $name = explode('.', $item->getName()); $name = $name[1]; //Первый комментарий $tokens = token_get_all($item->getFileContents()); $comment = array(T_COMMENT, T_DOC_COMMENT); $fileComment = ''; foreach ($tokens as $token) { if (in_array($token[0], $comment)) { $fileComment = trim($token[1]); break; } } $smParams[$type][] = array('name' => $name, 'comment' => $fileComment); } } break; case 'doubleimg': $images = DirManager::images()->getDirContentFull(null, DirItemFilter::IMAGES); $sorted = array(); /* @var $img DirItem */ foreach ($images as $img) { $ident = $img->getSize() . 'x' . $img->getImageAdapter()->getWidth() . 'x' . $img->getImageAdapter()->getHeight(); $sorted[$ident][] = $img; } $result = array(); /* @var $img DirItem */ foreach ($sorted as $ident => $imgs) { if (count($imgs) > 1) { $result[$ident] = $imgs; } } $smParams = array('images' => $result); break; case 'testmethods': $smParams['methods'] = TestManagerCaller::getMethodsList(); break; case 'imgbysize': $images = DirManager::images()->getDirContentFull(null, DirItemFilter::IMAGES, array('GymExercises')); DirItemSorter::inst()->sort($images, DirItemSorter::BY_SIZE); $smParams = array('images' => $images); break; case 'formules': $formules = TexImager::inst()->getAllFormules(); $totalSize = 0; /* @var $formula DirItem */ foreach ($formules as $formula) { $totalSize += $formula->getSize(); $formula->setData('class', 'TeX'); } DirItemSorter::inst()->sort($formules, DirItemSorter::BY_SIZE); $smParams = array('formules' => $formules, 'formules_size' => $totalSize); break; } $content = $smarty->fetch("test/page_{$pageType}.tpl", $smParams); if ($pageType) { switch ($pageType) { case 'patterns': $out = array(); preg_match_all("/===(.*?)===/", $content, $out, PREG_PATTERN_ORDER); $params = array(); for ($i = 0; $i < count($out[0]); $i++) { $full = $out[0][$i]; $ctt = $out[1][$i]; $params[$full] = "<div class=\"demo-head\">{$ctt}</div>"; } $content = PsStrings::replaceMap($content, $params); } } return $content; } //Тестовая страница $num = $params->int('num'); $num = $num ? $num : 1; return $smarty->fetch("test/page{$num}.tpl"); }
private function checkCombination(array $char2num) { $expr = PsStrings::replaceMap($this->EXPR, $char2num); $res = PsMathEvaluator::inst()->e($expr); if ($res === false) { $error = 'Ошибка обработки ребуса: ' . PsMathEvaluator::inst()->lastError(); $this->LOGGER->info($error); raise_error($error); } if ($res == 0) { $combination = PsStrings::replaceMap($this->REBUS, $char2num); $this->COMBINATIONS[] = $combination; $this->LOGGER->info($combination); } ++$this->cnt; }