/** * @covers generateCss */ public function testGenerateCss() { $env = new Context(); $env->strictUnits = true; $output = new StandardOutput(); $d = new DimensionNode('15', 'px'); $d->generateCss($env, $output); $this->assertEquals('15px', $output->toString()); }
protected function doMinmax($isMin, $args) { switch (count($args)) { case 0: throw new CompilerException('One or more arguments required.'); } $order = []; // elems only contains original argument values. $values = []; // key is the unit.toString() for unified tree.Dimension values, $unitClone = $unitStatic = $j = null; // value is the index into the order array. for ($i = 0; $i < count($args); $i++) { $current = $args[$i]; if (!$current instanceof DimensionNode) { if (is_array($args[$i])) { $args[] = $args[$i]->value; } continue; } if ($current->unit->toString() === '' && $unitClone !== null) { $dim = new DimensionNode($current->value, $unitClone); $currentUnified = $dim->unify(); } else { $currentUnified = $current->unify(); } $unit = $currentUnified->unit->toString() === '' && $unitStatic !== null ? $unitStatic : $currentUnified->unit->toString(); // $unitStatic = $unit !== '' && $unitStatic === null || $unit !== '' && $order[0]->unify()->unit->toString() === '' ? $unit : $unitStatic; if ($unit !== '' && !$unitStatic || $unit !== '' && $order[0]->unify()->unit->toString() === '') { $unitStatic = $unit; } $unitClone = $unit !== '' && $unitClone === null ? $current->unit->toString() : $unitClone; if (isset($values['']) && $unit !== '' && $unit === $unitStatic) { $j = $values['']; } elseif (isset($values[$unit])) { $j = $values[$unit]; } else { if ($unitStatic !== null && $unit !== $unitStatic) { throw new RuntimeException(sprintf('Incompatible types "%s" and "%s" given', $unitStatic, $unit)); } $values[$unit] = count($order); $order[] = $current; continue; } if ($order[$j]->unit->toString() === '' && $unitClone !== null) { $dim = new DimensionNode($order[$j]->value, $unitClone); $referenceUnified = $dim->unify(); } else { $referenceUnified = $order[$j]->unify(); } if ($isMin && $currentUnified->value < $referenceUnified->value || !$isMin && $currentUnified->value > $referenceUnified->value) { $order[$j] = $current; } } if (count($order) === 1) { return $order[0]; } foreach ($order as $k => $a) { $order[$k] = $a->toCSS($this->context); } $args = implode($this->context->compress ? ',' : ', ', $order); return new AnonymousNode(($isMin ? 'min' : 'max') . '(' . $args . ')'); }