PHP Classes

File: tests/TestRegistration/FunctionTest.php

Recommend this page to a friend!
  Packages of Thierry Feuzeu   Jaxon   tests/TestRegistration/FunctionTest.php   Download  
File: tests/TestRegistration/FunctionTest.php
Role: Class source
Content type: text/plain
Description: Class source
Class: Jaxon
Call PHP classes from JavaScript using AJAX
Author: By
Last change:
Date: 6 months ago
Size: 6,729 bytes
 

Contents

Class file image Download
<?php

namespace Jaxon\Tests\TestRegistration;

require_once
__DIR__ . '/../src/functions.php';

use
Jaxon\Exception\SetupException;
use
Jaxon\Jaxon;
use
Jaxon\Plugin\Request\CallableFunction\CallableFunction;
use
Jaxon\Plugin\Request\CallableFunction\CallableFunctionPlugin;
use
Jaxon\Utils\Http\UriException;
use
PHPUnit\Framework\TestCase;
use
Sample;

use function
strlen;

final class
FunctionTest extends TestCase
{
   
/**
     * @var CallableFunctionPlugin
     */
   
protected $xPlugin;

   
/**
     * @throws SetupException
     */
   
public function setUp(): void
   
{
       
jaxon()->setOption('core.prefix.function', 'jxn_');
       
// Register a function
       
jaxon()->register(Jaxon::CALLABLE_FUNCTION, 'my_first_function',
           
__DIR__ . '/../src/first.php');
       
// Register a function with an alias
       
jaxon()->register(Jaxon::CALLABLE_FUNCTION, 'my_second_function', [
           
'alias' => 'my_alias_function',
           
'upload' => "'html_field_id'",
        ]);
       
// Register a class method as a function
       
jaxon()->register(Jaxon::CALLABLE_FUNCTION, 'myMethod', [
           
'alias' => 'my_third_function',
           
'class' => Sample::class,
           
'include' => __DIR__ . '/../src/classes.php',
        ]);
       
$this->xPlugin = jaxon()->di()->getCallableFunctionPlugin();
    }

   
/**
     * @throws SetupException
     */
   
public function tearDown(): void
   
{
       
jaxon()->reset();
       
parent::tearDown();
    }

    public function
testPluginName()
    {
       
$this->assertEquals(Jaxon::CALLABLE_FUNCTION, $this->xPlugin->getName());
    }

    public function
testPHPFunction()
    {
       
// No callable for standard PHP functions.
       
$this->assertEquals(null, $this->xPlugin->getCallable('file_get_contents'));
    }

    public function
testNonCallableFunction()
    {
       
// No callable for aliased functions.
       
$this->assertEquals(null, $this->xPlugin->getCallable('my_second_function'));
    }

    public function
testCallableFunctionClass()
    {
       
$xFirstCallable = $this->xPlugin->getCallable('my_first_function');
       
$xAliasCallable = $this->xPlugin->getCallable('my_alias_function');
       
$xThirdCallable = $this->xPlugin->getCallable('my_third_function');
       
// Test callables classes
       
$this->assertEquals(CallableFunction::class, get_class($xFirstCallable));
       
$this->assertEquals(CallableFunction::class, get_class($xAliasCallable));
       
$this->assertEquals(CallableFunction::class, get_class($xThirdCallable));
    }

    public function
testCallableFunctionName()
    {
       
$xFirstCallable = $this->xPlugin->getCallable('my_first_function');
       
$xAliasCallable = $this->xPlugin->getCallable('my_alias_function');
       
$xThirdCallable = $this->xPlugin->getCallable('my_third_function');
       
// Test callables classes
       
$this->assertEquals('my_first_function', $xFirstCallable->getName());
       
$this->assertEquals('my_alias_function', $xAliasCallable->getName());
       
$this->assertEquals('my_third_function', $xThirdCallable->getName());
    }

    public function
testCallableFunctionJsName()
    {
       
$xFirstCallable = $this->xPlugin->getCallable('my_first_function');
       
$xAliasCallable = $this->xPlugin->getCallable('my_alias_function');
       
$xThirdCallable = $this->xPlugin->getCallable('my_third_function');
       
// Test callables classes
       
$this->assertEquals('jxn_my_first_function', $xFirstCallable->getJsName());
       
$this->assertEquals('jxn_my_alias_function', $xAliasCallable->getJsName());
       
$this->assertEquals('jxn_my_third_function', $xThirdCallable->getJsName());
    }

    public function
testCallableFunctionOptions()
    {
       
$xFirstCallable = $this->xPlugin->getCallable('my_first_function');
       
$xAliasCallable = $this->xPlugin->getCallable('my_alias_function');
       
$xThirdCallable = $this->xPlugin->getCallable('my_third_function');
       
// Test callables classes
       
$this->assertCount(0, $xFirstCallable->getOptions());
       
$this->assertCount(1, $xAliasCallable->getOptions());
       
$this->assertCount(0, $xThirdCallable->getOptions());
    }

    public function
testCallableFunctionJsCode()
    {
       
// $this->assertEquals('34608e208fda374f8761041969acf96e', $this->xPlugin->getHash());
       
$this->assertEquals(32, strlen($this->xPlugin->getHash()));
       
// file_put_contents(__DIR__ . '/../src/js/function.js', $this->xPlugin->getScript());
       
$this->assertEquals(file_get_contents(__DIR__ . '/../src/js/function.js'), $this->xPlugin->getScript());
    }

   
/**
     * @throws UriException
     */
   
public function testLibraryJsCode()
    {
       
// This URI will be parsed by the URI detector
       
$_SERVER['REQUEST_URI'] = 'http://example.test/path';

       
$sJsCode = jaxon()->getScript(true, true);
       
// file_put_contents(__DIR__ . '/../src/js/lib.js', $sJsCode);
       
$this->assertEquals(file_get_contents(__DIR__ . '/../src/js/lib.js'), $sJsCode);
       
$this->assertEquals(32, strlen(jaxon()->di()->getCodeGenerator()->getHash()));

        unset(
$_SERVER['REQUEST_URI']);
    }

   
/**
     * @throws UriException
     * @throws SetupException
     */
   
public function testLibraryJsCodeWithPlugins()
    {
        require_once
__DIR__ . '/../src/plugins.php';
        require_once
__DIR__ . '/../src/packages.php';

       
jaxon()->registerPlugin('SamplePlugin', 'plugin');
       
jaxon()->registerPackage('SamplePackage');

       
// This URI will be parsed by the URI detector
       
$_SERVER['REQUEST_URI'] = 'http://example.test/path';
       
$sJsCode = jaxon()->getScript(true, true);
       
// file_put_contents(__DIR__ . '/../src/js/plugin.html', $sJsCode);
       
$this->assertEquals(file_get_contents(__DIR__ . '/../src/js/plugin.html'), $sJsCode);
       
$this->assertEquals(32, strlen(jaxon()->di()->getCodeGenerator()->getHash()));

       
$sJsCode = jaxon()->getCss() . "\n\n" . jaxon()->getJs() . "\n\n" . jaxon()->getScript();
       
$this->assertEquals(file_get_contents(__DIR__ . '/../src/js/plugin.html'), $sJsCode);

        unset(
$_SERVER['REQUEST_URI']);
    }

    public function
testCallableFunctionIncorrectName()
    {
       
// Register a function with incorrect name
       
$this->expectException(SetupException::class);
       
jaxon()->register(Jaxon::CALLABLE_FUNCTION, 'my function');
    }

    public function
testCallableFunctionIncorrectOption()
    {
       
// Register a function with incorrect option
       
$this->expectException(SetupException::class);
       
jaxon()->register(Jaxon::CALLABLE_FUNCTION, 'my_function', true);
    }
}