<?php
class TestClientUser implements PerforceClientUser
{
    private $output = array();
    private $tags = array();
    function ClearOutput()
    {
        $this->output = array();
    }
    function GetOutput()
    {
        return $this->output;
    }
    function AppendOutput($text)
    {
        $this->output = array_merge($this->output, split("\n", $text));
    }
    function GetTags()
    {
        return $this->tags;
    }
    function OutputError($error)
    {
        $this->AppendOutput("$error\n");
    }
    function HandleError($msg, $severity)
    {
        $this->OutputError($msg);
    }
    function Message($msg, $severity)
    {
        $this->OutputInfo(0, $msg);
    }
    function InputData()
    {
        return fgets(STDIN);
    }
    function OutputInfo($level, $data)
    {
        $this->AppendOutput($data);
    }
    function OutputBinary($data)
    {
        $this->AppendOutput($data);
    }
    function OutputText($data)
    {
        $this->AppendOutput($data);
    }
    function OutputStat($tags)
    {
        $this->tags = array_merge($this->tags, $tags);
    }
    function Prompt($msg)
    {
        echo $msg;
        return fgets(STDIN);
    }
    function ErrorPause($buf)
    {
        $this->OutputError($buf);
        fgetc(STDIN);
    }
    function Edit($file)
    {
        if (!empty($_ENV['P4EDITOR'])) {
            $editor = $_ENV['P4EDITOR'];
        } else if (!empty($_ENV['EDITOR'])) {
            $editor = $_ENV['EDITOR'];
        } else {
            $editor = 'vi';
        }
        system("$editor $file");
    }
    function Diff($file1, $file2, $doPage, $flags)
    {
        if (!empty($_ENV['P4DIFF'])) {
            $diff = $_ENV['P4DIFF'];
        } else if (!empty($_ENV['DIFF'])) {
            $diff = $_ENV['DIFF'];
        } else {
            $this->OutputError(
                'No diff program specified with $P4DIFF or $DIFF.');
        }
        $pager = false;
        if ($doPage) {
            if (!empty($_ENV['P4PAGER'])) {
                $pager = $_ENV['P4PAGER'];
            } else if (!empty($_ENV['PAGER'])) {
                $pager = $_ENV['PAGER'];
            } else {
                $pager = false;
            }
        }
        if ($pager) {
            system("$diff $flags $file1 $file2 | $pager");
        } else {
            system("$diff $flags $file1 $file2");
        }
    }
    function Merge($base, $leg1, $leg2, $result)
    {
        if (!empty($_ENV['P4MERGE'])) {
            $merge = $_ENV['P4MERGE'];
        } else if (!empty($_ENV['MERGE'])) {
            $merge = $_ENV['MERGE'];
        } else {
            $this->OutputError(
                'No merge program specified with $P4MERGE or $MERGE.');
        }
        system("$merge $base $leg1 $leg2 $result");
    }
    function Help($help)
    {
        $this->Message(implode("\n", $help));
    }
}
                     
                                
                    
                
            
                | # | Change | User | Description | Committed |  | 
        
        
        
        
            
                | #2 | 6092 | Jon_Parise | Fixing support for tagged output. We also now return all of the tags
 (unfiltered) to the user's OutputStat() implementation.
 |  |  | 
        
            
                | #1 | 6084 | Jon_Parise | Adding some initial unit tests. |  |  |