<?php
/**
 * A dummy file represents a chunk of text that does not have a file system location.
 *
 * Dummy files can also represent a changed (but not saved) version of a file
 * and so can have a file path either set manually, or set by putting
 * phpcs_input_file: /path/to/file
 * as the first line of the file contents.
 *
 * @author    Greg Sherwood <gsherwood@squiz.net>
 * @copyright 2006-2015 Squiz Pty Ltd (ABN 77 084 670 600)
 * @license   https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
 */

namespace PHP_CodeSniffer\Files;

use PHP_CodeSniffer\Ruleset;
use PHP_CodeSniffer\Config;

class DummyFile extends File
{


    /**
     * Creates a DummyFile object and sets the content.
     *
     * @param string                   $content The content of the file.
     * @param \PHP_CodeSniffer\Ruleset $ruleset The ruleset used for the run.
     * @param \PHP_CodeSniffer\Config  $config  The config data for the run.
     *
     * @return void
     */
    public function __construct($content, Ruleset $ruleset, Config $config)
    {
        $this->setContent($content);

        // See if a filename was defined in the content.
        // This is done by including: phpcs_input_file: [file path]
        // as the first line of content.
        $path = 'STDIN';
        if ($content !== '') {
            if (substr($content, 0, 17) === 'phpcs_input_file:') {
                $eolPos   = strpos($content, $this->eolChar);
                $filename = trim(substr($content, 17, ($eolPos - 17)));
                $content  = substr($content, ($eolPos + strlen($this->eolChar)));
                $path     = $filename;

                $this->setContent($content);
            }
        }

        // The CLI arg overrides anything passed in the content.
        if ($config->stdinPath !== null) {
            $path = $config->stdinPath;
        }

        parent::__construct($path, $ruleset, $config);

    }//end __construct()


    /**
     * Set the error, warning, and fixable counts for the file.
     *
     * @param int $errorCount   The number of errors found.
     * @param int $warningCount The number of warnings found.
     * @param int $fixableCount The number of fixable errors found.
     * @param int $fixedCount   The number of errors that were fixed.
     *
     * @return void
     */
    public function setErrorCounts($errorCount, $warningCount, $fixableCount, $fixedCount)
    {
        $this->errorCount   = $errorCount;
        $this->warningCount = $warningCount;
        $this->fixableCount = $fixableCount;
        $this->fixedCount   = $fixedCount;

    }//end setErrorCounts()


}//end class
