예제 #1
0
    $dir = dirname(__FILE__);
    if (file_exists("{$dir}/../../LocalSettings.php")) {
        $IP = "{$dir}/../..";
    } elseif (file_exists("{$dir}/../../../LocalSettings.php")) {
        $IP = "{$dir}/../../..";
    } elseif (file_exists("{$dir}/../../phase3/LocalSettings.php")) {
        $IP = "{$dir}/../../phase3";
    } elseif (file_exists("{$dir}/../../../phase3/LocalSettings.php")) {
        $IP = "{$dir}/../../../phase3";
    } else {
        $IP = $dir;
    }
}
require_once "{$IP}/maintenance/commandLine.inc";
$dir = dirname(__FILE__);
$dtbase = dirname(realpath($dir));
require_once "{$dtbase}/DataTransclusionSource.php";
require_once "{$dtbase}/WebDataTransclusionSource.php";
$url = $args[0];
$format = $args[1];
$spec = array('name' => 'Dummy', 'keyFields' => 'id', 'url' => 'http://test.com/', 'dataFormat' => $format);
$web = new WebDataTransclusionSource($spec);
$raw = $web->loadRecordDataFromURL($url);
if (!$raw) {
    die("failed to load data from {$url}\n");
}
$data = $web->decodeData($raw, $format);
if (!$data) {
    die("failed to decode({$format}) data from {$url}\n");
}
print_r($data);
 function testWebDataTransclusionSource()
 {
     $spec = array('name' => 'FOO', 'keyFields' => 'id,name', 'optionNames' => 'x,y', 'url' => 'http://acme.com/{name}', 'dataFormat' => 'php', 'dataPath' => 'response/content/@0', 'fieldPathes' => array('id' => 'id/value', 'name' => 'name/value', 'info' => 'info/value'), 'errorPath' => 'response/error');
     $source = new WebDataTransclusionSource($spec);
     $u = $source->getRecordURL('name', 'foo&bar');
     $this->assertEquals('http://acme.com/foo%26bar', $u);
     $u = $source->getRecordURL('id', '23');
     $this->assertEquals('http://acme.com/?id=23', $u);
     $u = $source->getRecordURL('name', 'foo&bar', array('x' => '42', 'y' => 57));
     $this->assertEquals('http://acme.com/foo%26bar?x=42&y=57', $u);
     $rec = array("name" => array('type' => 'string', 'value' => "foo"), "id" => 3, "info" => array('type' => 'string', 'value' => "test X"));
     $data = array('response' => array('error' => 'test error', 'content' => array('foo' => $rec)));
     $data = serialize($data);
     $rec = $source->extractRecord($source->decodeData($data, 'php'));
     $err = $source->extractError($source->decodeData($data, 'php'));
     $this->assertEquals('test error', $err);
     $this->assertEquals(3, $rec['id']);
     //TODO: test extractField, with fancy snytax!
     //TODO: test flattenRecord
     ////////////////////////
     $spec['url'] = 'file://' . dirname(realpath(__FILE__)) . '/test-data-name-{name}.pser';
     $spec['dataFormat'] = 'php';
     $source = new WebDataTransclusionSource($spec);
     $rec = $source->fetchRecord('name', 'foo');
     $this->assertEquals(3, $rec['id']);
     ////////////////////////
     $spec['url'] = 'file://' . dirname(realpath(__FILE__)) . '/test-data-name-{name}.json';
     $spec['dataFormat'] = 'json';
     $source = new WebDataTransclusionSource($spec);
     $rec = $source->fetchRecord('name', 'foo');
     $this->assertEquals(3, $rec['id']);
     ////////////////////////
     if (function_exists('wddx_unserialize')) {
         $spec['url'] = 'file://' . dirname(realpath(__FILE__)) . '/test-data-name-{name}.wddx';
         $spec['dataFormat'] = 'wddx';
         $source = new WebDataTransclusionSource($spec);
         $rec = $source->fetchRecord('name', 'foo');
         $this->assertEquals(3, $rec['id']);
     }
 }