提交 11f0e9a7 编写于 作者: M Mislav Marohnić

Merge branch 'orphan-black'

Closes #209, fixes #185
......@@ -236,6 +236,10 @@
this._initBody(body)
}
Request.prototype.clone = function() {
return new Request(this)
}
function decode(body) {
var form = new FormData()
body.trim().split('&').forEach(function(bytes) {
......@@ -279,6 +283,15 @@
Body.call(Response.prototype)
Response.prototype.clone = function() {
return new Response(this._bodyInit, {
status: this.status,
statusText: this.statusText,
headers: new Headers(this.headers),
url: this.url
})
}
Response.error = function() {
var response = new Response(null, {status: 0, statusText: ''})
response.type = 'error'
......
......@@ -273,7 +273,7 @@ suite('Request', function() {
})
})
;(/Chrome\//.test(navigator.userAgent) ? test.skip : test)('construct with used Request body', function() {
;(/Chrome\//.test(navigator.userAgent) && !fetch.polyfill ? test.skip : test)('construct with used Request body', function() {
var request1 = new Request('https://fetch.spec.whatwg.org/', {
method: 'post',
body: 'I work out'
......@@ -286,6 +286,36 @@ suite('Request', function() {
})
})
test('clone request', function() {
var req = new Request('https://fetch.spec.whatwg.org/', {
method: 'post',
headers: {'content-type': 'text/plain'},
body: 'I work out'
})
var clone = req.clone()
assert.equal(clone.method, 'POST')
assert.equal(clone.headers.get('content-type'), 'text/plain')
assert.notEqual(clone.headers, req.headers)
return clone.text().then(function(body) {
assert.equal(body, 'I work out')
})
})
;(/Chrome\//.test(navigator.userAgent) && !fetch.polyfill ? test.skip : test)('clone with used Request body', function() {
var req = new Request('https://fetch.spec.whatwg.org/', {
method: 'post',
body: 'I work out'
})
return req.text().then(function() {
assert.throws(function() {
req.clone()
}, TypeError)
})
})
// https://fetch.spec.whatwg.org/#concept-bodyinit-extract
suite('BodyInit extract', function() {
;(Request.prototype.blob ? suite : suite.skip)('type Blob', function() {
......@@ -385,6 +415,35 @@ suite('Response', function() {
})
})
test('clone text response', function() {
var res = new Response('{"foo":"bar"}', {
headers: {'content-type': 'application/json'}
})
var clone = res.clone()
assert.notEqual(clone.headers, res.headers, 'headers were cloned')
assert.equal(clone.headers.get('content-type'), 'application/json')
return Promise.all([clone.json(), res.json()]).then(function(jsons){
assert.deepEqual(jsons[0], jsons[1], 'json of cloned object is the same as original')
})
})
;(Response.prototype.arrayBuffer ? test : test.skip)('clone blob response', function() {
return fetch('/binary').then(function(response) {
return Promise.all([response.clone().arrayBuffer(), response.arrayBuffer()]).then(function(bufs){
bufs.forEach(function(buf){
assert(buf instanceof ArrayBuffer, 'buf is an ArrayBuffer instance')
assert.equal(buf.byteLength, 256, 'buf.byteLength is correct')
var view = new Uint8Array(buf)
for (var i = 0; i < 256; i++) {
assert.equal(view[i], i)
}
})
})
})
})
test('error creates error Response', function() {
var r = Response.error()
assert(r instanceof Response)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册