<?php
 /**
 * Copyright 2005-2017 de Solis Soluções Livres Ltda.
 *
 * Este arquivo é parte do programa Gnuteca.
 *
 * O Gnuteca é um software de propriedade da SOLIS, sendo desenvolvido
 * e mantido exclusivamente por esta empresa.
 *
 * A licença de uso está disponível mediante aquisição exclusiva junto à
 * SOLIS. A licença é concedida sem caráter de exclusividade ao licenciado.
 * Os direitos de uso são perpétuos.
 *
 * Embora os códigos fontes sejam fornecidos, o software é de propriedade
 * da SOLIS, não sendo permitido ao adquirente da licença a sua revenda,
 * empréstimo ou cessão (onerosa ou não) à terceiros. Também não é permitido,
 * a qualquer título e tempo, promover no software qualquer tipo de alienação,
 * reprodução, distribuição, divulgação, registro, licenciamento, transferência
 * ou qualquer outro ato que prejudique ou comprometa os direitos de propriedade
 * de software, o nome e a imagem da sua proprietária e do próprio software,
 * além de configurar concorrência à SOLIS.
 *
 * O licenciado, com o acesso ao código fonte do software, terá o direito de
 * promover mudanças no respectivo código. No entanto, nas situações em que ele
 * contar com o suporte oficial prestado pela SOLIS, não poderá promover mudanças
 * no código fonte, sob pena de perda do referido suporte.
 *
 * Para conhecer em detalhes o Termo de Licenciamento do Software Gnuteca
 * leia o arquivo “LICENCA.txt” disponível junto ao código deste software.
 *
  * 
  */

//procura path do miolo
if ( !$_SERVER['HTTP_HOST'] ) //chamado por phpunit
{
    $pwd = $_SERVER['PWD']; //pwd atual
    $oldPwd = $_SERVER['OLDPWD']; //anterior
    $script = $_SERVER['argv'][1]; //chamada do script

    $mioloPath = '';
    if( ($pos = strpos($oldPwd, 'modules')) !== false )
    {
        $mioloPath = substr($oldPwd, 0, $pos);
    }
    else if ( ($pos = strpos($script, 'modules')) !== false )
    {
        $mioloPath = substr($script, 0, $pos);

        if ( substr($mioloPath, 0, 1) != '/' )
        {
            $mioloPath = $pwd . $mioloPath;
        }
    }
    else if ( ($pos = strpos($pwd, 'modules')) !== false )
    {
        $mioloPath = substr($pwd, 0, $pos);
    }
}

//$mioloPath = '/var/www/gnuteca3.eagle/';

$mioloClassesPath   = "$mioloPath/classes";
$module             = 'gnuteca3';
$mioloConsoleFile   = "$mioloPath/modules/$module/classes/mioloconsole.class.php";

$localFile          = str_replace("\\", "/", dirname(__FILE__)); 

// checa se miolo existe
if(!file_exists($mioloPath))
{
    die("\n\n\nMiolo Path not exists!!! \nFile: $mioloPath\n\n\n");
}
if(!file_exists($mioloConsoleFile))
{
    die("\n\n\nMiolo Console File not exists!!! \nFile: $mioloConsoleFile\n\n\n");
}

require_once($mioloConsoleFile);
$MIOLOConsole = new MIOLOConsole();
$GLOBALS['MIOLO'] = $MIOLO = $MIOLOConsole->getMIOLOInstance($mioloPath, $module);
$MIOLOConsole->loadMIOLO();
$MIOLO->uses('handlers/gnutecaClasses.inc.php', $module);
$MIOLO->uses('handlers/define.inc.php', $module);

//limpa a "sessão" dos testes unitários
file_put_contents( BusinessGnuteca3BusFile::getAbsoluteServerPath(true) . '/gUnit.serialize', '');

class GUnitTest extends PHPUnit_Framework_TestCase
{
    protected $MIOLO, $backupGlobalsBlacklist = array('MIOLO', 'autoload', 'MIOLOConsole');

    public function __construct()
    {
        $this->MIOLO = MIOLO::getInstance();
    }

    /*
    * Método para mostrar mensagem na tela
    *
    * @param string $msg
    */
    protected function exibe($msg)
    {
        if ( !is_string($msg ))
        {
            var_export($msg);
        }
        else
        {
            echo $msg;
        }

        echo  "\n";
    }

    /**
     * Obtem um valor "salvo na sessão" do GUnit.
     *
     * @param string $name a variável a obter
     * @return mixed
     */
    protected function getValue($name)
    {
        $path = BusinessGnuteca3BusFile::getAbsoluteServerPath(true). '/gUnit.serialize';
        $content = file_get_contents( $path );

        if ( !$content )
        {
            //é usado o die, pois o throw não pararia o resto dos testes
            //die('Arquivo serializado não encontrado, impossível recuperar informações do teste!.');
        }
        
        $file = unserialize($content);
	
        return $file->$name;
    }

    /**
     * Define um valor para ser usado em outro momento, algo semelhante a sessão.
     *
     * @param string $name a variável a salvar
     * @param string $value o conteúdo a salvar
     */
    protected function setValue($name, $value)
    {
        $path = BusinessGnuteca3BusFile::getAbsoluteServerPath(true). '/gUnit.serialize';

        if ( !is_writable( $path) )
        {
            die('Impossível escrever no arquivo '. $path );
        }

        //obtem o arquivo para manter o que já existe nele
        $file = unserialize( file_get_contents( $path ) );
        //define o valor
        $file->$name = $value;
        //salva o arquivo no disco novamente
        $ok = file_put_contents( $path,  serialize($file) );

        if ( !$ok )
        {
            die('Impossível salvar arquivo de valores de teste! ' . $path );
        }

        chmod( $path, 0777);
	}
}
?>