Beispiel #1
0
<?php

/**
 * Copyright 2010-12 Nickolas Whiting. All rights reserved.
 * Use of this source code is governed by the Apache 2 license
 * that can be found in the LICENSE file.
 */
xp_import('unittest');
use XPSPL\idle\Time;
unittest\suite(function ($suite) {
    $suite->test(function ($test) {
        $time1 = new Time(1, TIME_SECONDS);
        $time2 = new Time(1500, TIME_MILLISECONDS);
        $test->true($time1->override($time2));
    }, 'Milliseconds more than seconds');
    $suite->test(function ($test) {
        $time1 = new Time(2, TIME_SECONDS);
        $time2 = new Time(1500, TIME_MILLISECONDS);
        $test->true($time1->override($time2));
    }, 'Seconds more than milliseconds');
});
Beispiel #2
0
unittest\suite(function ($suite) {
    $suite->setup(function ($test) {
        $test->signal = new \XPSPL\SIG();
    });
    $suite->teardown(function ($test) {
        unset($test->signal);
    });
    $suite->test(function ($test) {
        logger(XPSPL_LOG)->info($test->signal->get_state());
        $test->equal($test->signal->get_state(), STATE_DECLARED);
        $test->signal->halt();
        $test->equal($test->signal->get_state(), STATE_HALTED);
    }, "signal_halt");
    $suite->test(function ($test) {
        $parent = new \XPSPL\SIG();
        $test->false($test->signal->is_child());
        $test->signal->set_parent($parent);
        $test->true($test->signal->is_child());
        $test->equal($test->signal->get_parent(), $parent);
        $test->signal->set_parent($test->signal);
        $test->equal($test->signal->get_parent(), $test->signal);
    }, "signal_parent_child");
    $suite->test(function ($test) {
        $test->exception('LogicException', function () use($test) {
            $test->signal->a++;
        });
        $test->signal->a = "Test";
        $test->true(isset($test->signal->a));
        $test->equal($test->signal->a, "Test");
        unset($test->signal->a);
        $test->false(isset($test->signal->a));
        $test->exception('LogicException', function () use($test) {
            $test->signal->a++;
        });
    }, "signal_data");
});
Beispiel #3
0
unittest\suite(function ($suite) {
    $suite->setup(function ($test) {
        $test->processor = new XPSPL\Processor();
    });
    $suite->teardown(function ($test) {
        unset($test->processor);
    });
    $suite->test(function ($test) {
        $test->equal($test->processor->get_state(), STATE_DECLARED);
    }, 'Processor Construction');
    $suite->test(function ($test) {
        $processor = new \XPSPL\Processor(false);
        $test->false($processor->signal_history());
        $processor->emit(new \XPSPL\SIG('test'));
        $test->false($processor->signal_history());
    }, 'construct_no_history');
    $suite->test(function ($test) {
        $test->processor->signal(new \XPSPL\SIG('test'), new \XPSPL\Process(function () {
        }));
        $test->false($test->processor->has_signal_exhausted(new \XPSPL\SIG('test')));
        $test->processor->emit(new \XPSPL\SIG('test'));
        $queue = $test->processor->find_signal_database(new \XPSPL\SIG('test'));
        $test->instanceof($queue, new \XPSPL\database\Processes());
        // $test->count($queue->get_storage(), 0);
    }, 'auto_remove_exhausted');
    $suite->test(function ($test) {
        // String based
        $test->processor->register_signal(new \XPSPL\SIG(new \XPSPL\SIG('test')));
        $test->instanceof($test->processor->find_signal_database(new \XPSPL\SIG(new \XPSPL\SIG('test'))), 'XPSPL\\database\\Signals');
        $test->processor->delete_signal(new \XPSPL\SIG('test'));
        $test->null($test->processor->find_signal_database(new \XPSPL\SIG('test')));
        $signal = new \XPSPL\SIG(new \XPSPL\SIG('test'));
        // Delete history
        $test->processor->signal(new \XPSPL\SIG($signal), new \XPSPL\Process(function () {
        }));
        $test->processor->emit(new \XPSPL\SIG($signal));
        $history = $test->processor->signal_history();
        // Need to implement a search history function ... ?
        $count = 0;
        foreach ($history as $_record) {
            if ($_record[1] === $signal) {
                $count++;
            }
        }
        $test->equal($count, 1);
        // Delete signal keep history
        $test->processor->register_signal($signal);
        $test->processor->delete_signal($signal, false);
        $history = $test->processor->signal_history();
        $count = 0;
        foreach ($history as $_record) {
            if ($_record[1] === $signal) {
                $count++;
            }
        }
        $test->equal($count, 1);
        // Delete signal remove history
        $test->processor->register_signal($signal);
        $test->processor->delete_signal($signal, true);
        $count = 0;
        $history = $test->processor->signal_history();
        foreach ($history as $_record) {
            if ($_record[1] === $signal) {
                $count++;
            }
        }
        $test->equal($count, 0);
    }, 'delete_signal');
    $suite->test(function ($test) {
        $test->processor->signal(new \XPSPL\SIG('test'), new \XPSPL\Process(function () {
        }));
        $test->false($test->processor->has_signal_exhausted(new \XPSPL\SIG('test')));
        $test->processor->emit(new \XPSPL\SIG('test'));
        $test->false($test->processor->has_signal_exhausted(new \XPSPL\SIG('test')));
    }, "has_signal_exhausted");
    $suite->test(function ($test) {
        $test->processor->signal(new \XPSPL\SIG('test'), new \XPSPL\Process(function () {
        }, 1));
        $queue = $test->processor->find_signal_database(new \XPSPL\SIG('test'));
        $test->false($test->processor->are_processes_exhausted($queue));
        $test->processor->emit(new \XPSPL\SIG('test'));
        $test->true($test->processor->are_processes_exhausted($queue));
        $test->count($queue->get_storage(), 0);
    }, 'queue_exhausted');
    $suite->test(function ($test) {
        $test->processor->signal(new \XPSPL\SIG('test'), new XPSPL\Process(function () {
        }, null));
        $test->processor->emit(new \XPSPL\SIG('test'));
        $test->equal($test->processor->get_state(), STATE_DECLARED);
        $test->count($test->processor->signal_history(), 1);
        $test->instanceof($test->processor->find_signal_database(new \XPSPL\SIG('test')), new XPSPL\database\Processes());
        $test->false($test->processor->has_signal_exhausted(new \XPSPL\SIG('test')));
        $test->processor->flush();
        $test->equal($test->processor->get_state(), STATE_DECLARED);
        $test->null($test->processor->find_signal_database(new \XPSPL\SIG('test')));
        // $test->count($test->processor->signal_history(), 0);
    }, 'flush');
    $suite->test(function ($test) {
        $process = $test->processor->signal(new \XPSPL\SIG('test'), new \XPSPL\Process(function () {
        }));
        $test->instanceof($process, 'XPSPL\\Process');
        $queue = $test->processor->find_signal_database(new \XPSPL\SIG('test'));
        $test->count($queue->get_storage(), 1);
        $test->false($test->processor->has_signal_exhausted(new \XPSPL\SIG('test')));
        $test->processor->delete_process(new \XPSPL\SIG('test'), $process);
        $test->count($queue->get_storage(), 0);
        $test->true($test->processor->has_signal_exhausted(new \XPSPL\SIG('test')));
    }, 'process,process_remove');
    $suite->test(function ($test) {
        $test->processor->listen(new TL());
        $queue = $test->processor->find_signal_database(new \XPSPL\SIG('test'));
        if (!$test->notnull($queue)) {
            $test->mark_skipped(4);
            return;
        }
        if (!$test->instanceof($queue, 'XPSPL\\database\\Processes')) {
            $test->mark_skipped(3);
            return;
        }
        if (!$test->count($queue->get_storage(), 1)) {
            $test->mark_skipped(2);
            return;
        }
        $test->false($test->processor->has_signal_exhausted(new \XPSPL\SIG('test')));
        $event = $test->processor->emit(new \XPSPL\SIG('test'));
        $test->true($event->test);
    }, 'listen');
    $suite->test(function ($test) {
        $test->processor->register_signal(new \XPSPL\SIG('test'));
        $test->notnull($test->processor->find_signal_database(new \XPSPL\SIG('test')));
        $test->instanceof($test->processor->find_signal_database(new \XPSPL\SIG('test')), 'XPSPL\\database\\Processes');
        class CMP extends XPSPL\SIG_Complex
        {
            public function evaluate($signal = false)
            {
                return true;
            }
        }
        $cmp = new CMP();
        $test->processor->register_signal($cmp);
        $test->notnull($test->processor->find_signal_database($cmp));
        $test->instanceof($test->processor->find_signal_database($cmp), 'XPSPL\\database\\Processes');
        $db = $test->processor->find_signal_database($cmp, true);
        $test->instanceof($db, 'XPSPL\\database\\Processes');
    }, 'find_signal_database');
    $suite->test(function ($test) {
        class EVL extends XPSPL\SIG_Complex
        {
            public function evaluate($signal = null)
            {
                return true;
            }
        }
        class EVF extends XPSPL\SIG_Complex
        {
            public function evaluate($signal = null)
            {
                return false;
            }
        }
        $evl = new EVL();
        $evf = new EVF();
        $test->null($test->processor->evaluate_signals(new \XPSPL\SIG('test')));
        $test->processor->register_signal($evl);
        $test->processor->register_signal($evf);
        $eval = $test->processor->evaluate_signals(new \XPSPL\SIG('test'));
        $test->array($eval);
        $test->count($eval, 1);
        $test->processor->delete_signal($evl);
        $test->null($test->processor->evaluate_signals(new \XPSPL\SIG('test')));
    }, 'evaluate_signals');
    $suite->test(function ($test) {
        // Simple
        $test->processor->signal(new \XPSPL\SIG('before_after_test'), new \XPSPL\Process(function ($signal) use($test) {
            $test->isset('count', $signal);
            $test->equal($signal->count, 1);
            ++$signal->count;
        }));
        $test->processor->before(new \XPSPL\SIG('before_after_test'), new \XPSPL\Process(function ($signal) {
            $signal->count = 1;
        }));
        $test->processor->after(new \XPSPL\SIG('before_after_test'), xp_high_priority(function ($signal) use($test) {
            $test->equal($signal->count, 2);
        }));
        $test->processor->after(new \XPSPL\SIG('before_after_test'), new \XPSPL\Process(function ($signal) {
            ++$signal->count;
        }));
        $result = $test->processor->emit(new \XPSPL\SIG('before_after_test'));
        $test->isset('count', $result);
        $test->equal($result->count, 3);
    }, 'before,after');
    // NOT IMPLEMENTED
    // $suite->test(function($test){
    //     $test->processor->register_signal(new \XPSPL\SIG('test'));
    //     $test->notnull($test->processor->find_signal_database(new \XPSPL\SIG('test')));
    //     $test->instanceof(
    //         $test->processor->find_signal_database(new \XPSPL\SIG('test')),
    //         new \XPSPL\database\Processes()
    //     );
    //     $test->processor->clean();
    //     $test->null($test->processor->find_signal_database(new \XPSPL\SIG('test')));
    //     $test->processor->register_signal(new \XPSPL\SIG('test'));
    //     $test->processor->signal(new \XPSPL\SIG('test'), function(){});
    //     $test->notnull($test->processor->find_signal_database(new \XPSPL\SIG('test')));
    //     $test->false($test->processor->queue_exhausted(
    //         $test->processor->find_signal_database(new \XPSPL\SIG('test'))
    //     ));
    //     $test->processor->emit(new \XPSPL\SIG('test'));
    //     $test->processor->clean(true);
    //     $test->null($test->processor->find_signal_database(new \XPSPL\SIG('test')));
    //     $test->count($test->processor->signal_history(), 0);
    // }, 'clean');
});