import RNTest from './react-native-testkit/' import React from 'react' import RNFetchBlob from 'react-native-fetch-blob' import Timer from 'react-timer-mixin' import { StyleSheet, Text, View, ScrollView, CameraRoll, Platform, Dimensions, Image, } from 'react-native'; const fs = RNFetchBlob.fs const Blob = RNFetchBlob.polyfill.Blob window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest window.Blob = Blob window.ProgressEvent = RNFetchBlob.polyfill.ProgressEvent const { Assert, Comparer, Info, prop } = RNTest const describe = RNTest.config({ group : 'XMLHttpRequest', run : true, expand : false, timeout : 20000, }) const { TEST_SERVER_URL, TEST_SERVER_URL_SSL, DROPBOX_TOKEN, styles } = prop() const dirs = RNFetchBlob.fs.dirs let prefix = ((Platform.OS === 'android') ? 'file://' : '') let file = RNTest.prop('image') /** * Test cases are based on W3C github repository. * {@link https://github.com/w3c/web-platform-tests/blob/master/XMLHttpRequest/} */ describe('unsent state test', (report, done) => { let xhr = new XMLHttpRequest() try { xhr.setRequestHeader('x-test', 'test') } catch(err) { report( ) } try { let xhr = new XMLHttpRequest() xhr.send(null) } catch(err) { report( ) } try { report( , , , , ) done() } catch(err) { console.log(err.stack) } }) describe('HTTP error should not throw error event', (report, done) => { onError('GET', 200) onError('GET', 400) onError('GET', 401) onError('GET', 404) onError('GET', 410) onError('GET', 500) onError('GET', 699) onError('HEAD', 200) onError('HEAD', 404) onError('HEAD', 500) onError('HEAD', 699) onError('POST', 200) onError('POST', 404) onError('POST', 500) onError('POST', 699) onError('PUT', 200) onError('PUT', 404) onError('PUT', 500) onError('PUT', 699) done() let count = 0 function onError(method, code) { let xhr = new XMLHttpRequest() xhr.open(method, `${TEST_SERVER_URL}/xhr-code/${code}`) xhr.onreadystatechange = function() { count++ if(this.readyState == XMLHttpRequest.DONE) { report( , ) } } xhr.onerror = function() { report( ) } xhr.send() } }) describe('request headers records should be cleared by open()', (report, done) => { let xhr = new XMLHttpRequest() xhr.open('GET', `${TEST_SERVER_URL}/xhr-header`) xhr.setRequestHeader('value', '100') xhr.setRequestHeader('cache-control', 'no-store') xhr.open('GET', `${TEST_SERVER_URL}/xhr-header`) xhr.setRequestHeader('value', '200') xhr.send() xhr.onreadystatechange = function() { if(this.readyState == 4) { report() done() } } }) /** * {@link https://github.com/w3c/web-platform-tests/blob/master/XMLHttpRequest/setrequestheader-bogus-name.htm} */ describe('invalid characters should not exists in header field', (report, done) => { function try_name(name) { try { let client = new XMLHttpRequest() client.open("GET", `${TEST_SERVER_URL}/public/github.png`) client.setRequestHeader(name, '123') } catch(err) { report( ) } } function try_byte_string(name) { try { let client = new XMLHttpRequest() client.open("GET", `${TEST_SERVER_URL}/public/github.png`) client.setRequestHeader(name, '123') } catch(err) { report( ) } } var invalid_headers = ["(", ")", "<", ">", "@", ",", ";", ":", "\\", "\"", "/", "[", "]", "?", "=", "{", "}", " ", "\u007f", "", "t\rt", "t\nt", "t: t", "t:t", "t { try { let xhr = new XMLHttpRequest() xhr.setRequestHeader('foo', 'bar') } catch(err) { report( {err} , ) done() } }) describe('upload progress event test', (report, done) => { let xhr = new XMLHttpRequest() let time = Date.now() let msg = `time=${time}` xhr.upload.onprogress = function(e) { report( ) } xhr.onreadystatechange = function() { if(this.readyState == XMLHttpRequest.DONE) { report( , ) done() } } xhr.open('POST', `${TEST_SERVER_URL}/upload`) xhr.overrideMimeType('application/x-www-form-urlencoded') xhr.send(msg) }) describe('timeout event catchable', (report, done) => { let xhr = new XMLHttpRequest() let count = 0 xhr.timeout = 1 xhr.ontimeout = function() { report( {count} , ) done() } xhr.open('GET', `${TEST_SERVER_URL}/timeout/`) xhr.send() }) describe('upload progress event should not be triggered when body is empty', (report, done) => { let xhr = new XMLHttpRequest() let count = 0 xhr.upload.onloadstart = function() { report( ) } xhr.upload.onprogress = function() { report( ) } xhr.onreadystatechange = function() { if(this.readyState == XMLHttpRequest.DONE) { count++ report( , ) done() } } xhr.open('GET', `${TEST_SERVER_URL}/public/github.png`) xhr.send() })