add pipe
This commit is contained in:
parent
661bc3168d
commit
c32736bd9e
@ -23,5 +23,9 @@ class HttpServiceProvider implements ServiceProviderContract
|
|||||||
$kernel->bind('post',function (...$args){
|
$kernel->bind('post',function (...$args){
|
||||||
return HttpService::post($this,...$args);
|
return HttpService::post($this,...$args);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$kernel->bind('postJson',function (...$args){
|
||||||
|
return HttpService::postJson($this,...$args);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -24,5 +24,9 @@ class SystemServiceProvider implements ServiceProviderContract
|
|||||||
return $this->query()->getData($callback)->all();
|
return $this->query()->getData($callback)->all();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$kernel->bind('pipe',function (Closure $callback = null){
|
||||||
|
return $callback($this);
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -35,7 +35,9 @@ use Closure;
|
|||||||
* @method QueryList encoding(string $outputEncoding,string $inputEncoding = null)
|
* @method QueryList encoding(string $outputEncoding,string $inputEncoding = null)
|
||||||
* @method QueryList get($url,$args = null,$otherArgs = [])
|
* @method QueryList get($url,$args = null,$otherArgs = [])
|
||||||
* @method QueryList post($url,$args = null,$otherArgs = [])
|
* @method QueryList post($url,$args = null,$otherArgs = [])
|
||||||
|
* @method QueryList postJson($url,$args = null,$otherArgs = [])
|
||||||
* @method QueryList use($plugins,...$opt)
|
* @method QueryList use($plugins,...$opt)
|
||||||
|
* @method QueryList pipe(Closure $callback = null)
|
||||||
*/
|
*/
|
||||||
class QueryList
|
class QueryList
|
||||||
{
|
{
|
||||||
|
@ -45,4 +45,15 @@ class HttpService
|
|||||||
$ql->setHtml($html);
|
$ql->setHtml($html);
|
||||||
return $ql;
|
return $ql;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function postJson(QueryList $ql,$url,$args = null,$otherArgs = [])
|
||||||
|
{
|
||||||
|
$otherArgs = array_merge([
|
||||||
|
'cookies' => self::getCookieJar(),
|
||||||
|
'verify' => false
|
||||||
|
],$otherArgs);
|
||||||
|
$html = GHttp::postJson($url,$args,$otherArgs);
|
||||||
|
$ql->setHtml($html);
|
||||||
|
return $ql;
|
||||||
|
}
|
||||||
}
|
}
|
71
tests/Dom/FindTest.php
Normal file
71
tests/Dom/FindTest.php
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: x
|
||||||
|
* Date: 2018/12/10
|
||||||
|
* Time: 12:46 AM
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Tests\Dom;
|
||||||
|
|
||||||
|
|
||||||
|
use QL\QueryList;
|
||||||
|
use Tests\TestCaseBase;
|
||||||
|
|
||||||
|
class FindTest extends TestCaseBase
|
||||||
|
{
|
||||||
|
protected $html;
|
||||||
|
protected $ql;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
$this->html = $this->getSnippet('snippet-1');
|
||||||
|
$this->ql = QueryList::html($this->html);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function find_first_dom_attr()
|
||||||
|
{
|
||||||
|
$img = [];
|
||||||
|
$img[] = $this->ql->find('img')->attr('src');
|
||||||
|
$img[] = $this->ql->find('img')->src;
|
||||||
|
$img[] = $this->ql->find('img:eq(0)')->src;
|
||||||
|
$img[] = $this->ql->find('img')->eq(0)->src;
|
||||||
|
|
||||||
|
$alt = $this->ql->find('img')->alt;
|
||||||
|
$abc = $this->ql->find('img')->abc;
|
||||||
|
|
||||||
|
$this->assertCount(1,array_unique($img));
|
||||||
|
$this->assertEquals($alt,'这是图片');
|
||||||
|
$this->assertEquals($abc,'这是一个自定义属性');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function find_second_dom_attr()
|
||||||
|
{
|
||||||
|
|
||||||
|
$img2 = [];
|
||||||
|
$img2[] = $this->ql->find('img')->eq(1)->alt;
|
||||||
|
$img2[] = $this->ql->find('img:eq(1)')->alt;
|
||||||
|
$img2[] = $this->ql->find('.second_pic')->alt;
|
||||||
|
|
||||||
|
$this->assertCount(1,array_unique($img2));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function find_dom_all_attr()
|
||||||
|
{
|
||||||
|
$imgAttr = $this->ql->find('img:eq(0)')->attr('*');
|
||||||
|
$linkAttr = $this->ql->find('a:eq(1)')->attr('*');
|
||||||
|
$this->assertCount(3,$imgAttr);
|
||||||
|
$this->assertCount(1,$linkAttr);
|
||||||
|
}
|
||||||
|
}
|
33
tests/Feature/HttpTest.php
Normal file
33
tests/Feature/HttpTest.php
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: x
|
||||||
|
* Date: 2018/12/10
|
||||||
|
* Time: 12:35 AM
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Tests\Feature;
|
||||||
|
|
||||||
|
|
||||||
|
use GuzzleHttp\Handler\MockHandler;
|
||||||
|
use GuzzleHttp\Psr7\Response;
|
||||||
|
use QL\QueryList;
|
||||||
|
use Tests\TestCaseBase;
|
||||||
|
|
||||||
|
class HttpTest extends TestCaseBase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function can_post_json_data()
|
||||||
|
{
|
||||||
|
$mock = new MockHandler([new Response()]);
|
||||||
|
$data = [
|
||||||
|
'name' => 'foo'
|
||||||
|
];
|
||||||
|
QueryList::postJson('http://foo.com',$data,[
|
||||||
|
'handler' => $mock
|
||||||
|
]);
|
||||||
|
$this->assertEquals((string)$mock->getLastRequest()->getBody(),json_encode($data));
|
||||||
|
}
|
||||||
|
}
|
36
tests/Feature/MethodTest.php
Normal file
36
tests/Feature/MethodTest.php
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: x
|
||||||
|
* Date: 2018/12/10
|
||||||
|
* Time: 1:14 AM
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Tests\Feature;
|
||||||
|
|
||||||
|
|
||||||
|
use QL\QueryList;
|
||||||
|
use Tests\TestCaseBase;
|
||||||
|
|
||||||
|
class MethodTest extends TestCaseBase
|
||||||
|
{
|
||||||
|
protected $html;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
$this->html = $this->getSnippet('snippet-1');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function pipe()
|
||||||
|
{
|
||||||
|
$html = $this->html;
|
||||||
|
$qlHtml = QueryList::pipe(function(QueryList $ql) use($html){
|
||||||
|
$ql->setHtml($html);
|
||||||
|
return $ql;
|
||||||
|
})->getHtml();
|
||||||
|
$this->assertEquals($html,$qlHtml);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user