PageRenderTime 17ms CodeModel.GetById 8ms app.highlight 5ms RepoModel.GetById 1ms app.codeStats 0ms

/vendor/phpunit/phpunit/PHPUnit/Util/TestDox/NamePrettifier.php

https://bitbucket.org/sklyarov_ivan/trap
PHP | 177 lines | 70 code | 22 blank | 85 comment | 22 complexity | d04ce96eb6f863a37bf2805f278dc773 MD5 | raw file
  1<?php
  2/**
  3 * PHPUnit
  4 *
  5 * Copyright (c) 2001-2012, Sebastian Bergmann <sebastian@phpunit.de>.
  6 * All rights reserved.
  7 *
  8 * Redistribution and use in source and binary forms, with or without
  9 * modification, are permitted provided that the following conditions
 10 * are met:
 11 *
 12 *   * Redistributions of source code must retain the above copyright
 13 *     notice, this list of conditions and the following disclaimer.
 14 *
 15 *   * Redistributions in binary form must reproduce the above copyright
 16 *     notice, this list of conditions and the following disclaimer in
 17 *     the documentation and/or other materials provided with the
 18 *     distribution.
 19 *
 20 *   * Neither the name of Sebastian Bergmann nor the names of his
 21 *     contributors may be used to endorse or promote products derived
 22 *     from this software without specific prior written permission.
 23 *
 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 25 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 26 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 27 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 28 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 29 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 30 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 31 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 34 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 35 * POSSIBILITY OF SUCH DAMAGE.
 36 *
 37 * @package    PHPUnit
 38 * @subpackage Util_TestDox
 39 * @author     Sebastian Bergmann <sebastian@phpunit.de>
 40 * @copyright  2001-2012 Sebastian Bergmann <sebastian@phpunit.de>
 41 * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
 42 * @link       http://www.phpunit.de/
 43 * @since      File available since Release 2.3.0
 44 */
 45
 46/**
 47 * Prettifies class and method names for use in TestDox documentation.
 48 *
 49 * @package    PHPUnit
 50 * @subpackage Util_TestDox
 51 * @author     Sebastian Bergmann <sebastian@phpunit.de>
 52 * @copyright  2001-2012 Sebastian Bergmann <sebastian@phpunit.de>
 53 * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
 54 * @link       http://www.phpunit.de/
 55 * @since      Class available since Release 2.1.0
 56 */
 57class PHPUnit_Util_TestDox_NamePrettifier
 58{
 59    /**
 60     * @var    string
 61     */
 62    protected $prefix = 'Test';
 63
 64    /**
 65     * @var    string
 66     */
 67    protected $suffix = 'Test';
 68
 69    /**
 70     * @var    array
 71     */
 72    protected $strings = array();
 73
 74    /**
 75     * Prettifies the name of a test class.
 76     *
 77     * @param  string  $name
 78     * @return string
 79     */
 80    public function prettifyTestClass($name)
 81    {
 82        $title = $name;
 83
 84        if ($this->suffix !== NULL &&
 85            $this->suffix == substr($name, -1 * strlen($this->suffix))) {
 86            $title = substr($title, 0, strripos($title, $this->suffix));
 87        }
 88
 89        if ($this->prefix !== NULL &&
 90            $this->prefix == substr($name, 0, strlen($this->prefix))) {
 91            $title = substr($title, strlen($this->prefix));
 92        }
 93
 94        return $title;
 95    }
 96
 97    /**
 98     * Prettifies the name of a test method.
 99     *
100     * @param  string  $name
101     * @return string
102     */
103    public function prettifyTestMethod($name)
104    {
105        $buffer = '';
106
107        if (!is_string($name) || strlen($name) == 0) {
108            return $buffer;
109        }
110
111        $string = preg_replace('#\d+$#', '', $name, -1, $count);
112
113        if (in_array($string, $this->strings)) {
114            $name = $string;
115        } else if ($count == 0) {
116            $this->strings[] = $string;
117        }
118
119        if (strpos($name, '_') !== FALSE) {
120            return str_replace('_', ' ', $name);
121        }
122
123        $max = strlen($name);
124
125        if (substr($name, 0, 4) == 'test') {
126            $offset = 4;
127        } else {
128            $offset  = 0;
129            $name[0] = strtoupper($name[0]);
130        }
131
132        $wasNumeric = FALSE;
133
134        for ($i = $offset; $i < $max; $i++) {
135            if ($i > $offset &&
136                ord($name[$i]) >= 65 &&
137                ord($name[$i]) <= 90) {
138                $buffer .= ' ' . strtolower($name[$i]);
139            } else {
140                $isNumeric = is_numeric($name[$i]);
141
142                if (!$wasNumeric && $isNumeric) {
143                    $buffer    .= ' ';
144                    $wasNumeric = TRUE;
145                }
146
147                if ($wasNumeric && !$isNumeric) {
148                    $wasNumeric = FALSE;
149                }
150
151                $buffer .= $name[$i];
152            }
153        }
154
155        return $buffer;
156    }
157
158    /**
159     * Sets the prefix of test names.
160     *
161     * @param  string  $prefix
162     */
163    public function setPrefix($prefix)
164    {
165        $this->prefix = $prefix;
166    }
167
168    /**
169     * Sets the suffix of test names.
170     *
171     * @param  string  $prefix
172     */
173    public function setSuffix($suffix)
174    {
175        $this->suffix = $suffix;
176    }
177}