Keine Beschreibung

test-0.7.0.js 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import RNTest from './react-native-testkit/'
  2. import React from 'react'
  3. import RNFetchBlob from 'react-native-fetch-blob'
  4. import Timer from 'react-timer-mixin'
  5. import {
  6. StyleSheet,
  7. Text,
  8. View,
  9. ScrollView,
  10. CameraRoll,
  11. Platform,
  12. Dimensions,
  13. Image,
  14. } from 'react-native';
  15. const fs = RNFetchBlob.fs
  16. const { Assert, Comparer, Info, prop } = RNTest
  17. const describe = RNTest.config({
  18. group : '0.7.0',
  19. run : true,
  20. expand : true,
  21. timeout : 300000000,
  22. })
  23. const { TEST_SERVER_URL, TEST_SERVER_URL_SSL, DROPBOX_TOKEN, styles } = prop()
  24. const dirs = RNFetchBlob.fs.dirs
  25. let prefix = ((Platform.OS === 'android') ? 'file://' : '')
  26. let bigfile = null
  27. describe('Upload and download large file', (report, done) => {
  28. let filename = Platform.OS+'-0.7.0-22mb-dummy-' + Date.now()
  29. let begin = -1
  30. let begin2 = -1
  31. let deb = Date.now()
  32. RNFetchBlob.config({
  33. fileCache : true
  34. })
  35. .fetch('GET', `${TEST_SERVER_URL}/public/22mb-dummy`)
  36. .progress((now, total) => {
  37. if(begin === -1)
  38. begin = Date.now()
  39. if(Date.now() - deb < 1000)
  40. return
  41. deb = Date.now()
  42. report(<Info uid="200" key="progress">
  43. <Text>
  44. {`download ${now} / ${total} bytes (${Math.floor(now / (Date.now() - begin))} kb/s)`}
  45. </Text>
  46. </Info>)
  47. })
  48. .then((res) => {
  49. bigfile = res.path()
  50. done()
  51. })
  52. // .then((res) => {
  53. // bigfile = res.path()
  54. // try {
  55. // deb = Date.now()
  56. // let promise = RNFetchBlob.fetch('POST', 'https://content.dropboxapi.com/2/files/upload', {
  57. // Authorization : `Bearer ${DROPBOX_TOKEN}`,
  58. // 'Dropbox-API-Arg': '{\"path\": \"/rn-upload/'+filename+'\",\"mode\": \"add\",\"autorename\": true,\"mute\": false}',
  59. // 'Content-Type' : 'application/octet-stream',
  60. // }, RNFetchBlob.wrap(res.path()))
  61. // promise.uploadProgress((now, total) => {
  62. // if(Date.now() - deb < 1000)
  63. // return
  64. // deb = Date.now()
  65. // if(begin2 === -1)
  66. // begin2 = Date.now()
  67. // let speed = Math.floor(now / (Date.now() - begin2))
  68. // report(<Info uid="100" key="progress">
  69. // <Text>
  70. // {`upload ${now} / ${total} bytes (${speed} kb/s)`}
  71. // {` ${Math.floor((total-now)/speed/1000)} seconds left`}
  72. // </Text>
  73. // </Info>)
  74. // })
  75. // return promise
  76. // } catch(err) { console.log(err) }
  77. // })
  78. // .then((res) => {
  79. // report(<Assert
  80. // key="upload should success without crashing app"
  81. // expect={filename}
  82. // actual={res.json().name}/>)
  83. // done()
  84. // })
  85. })
  86. describe('cancel task should work properly', (report, done) => {
  87. let filename = Platform.OS+'-0.7.0-cancel-test-22mb-dummy-' + Date.now()
  88. let bytesWitten = 0
  89. let deb = Date.now()
  90. let begin = -1
  91. let promise = RNFetchBlob.fetch('POST', 'https://content.dropboxapi.com/2/files/upload', {
  92. Authorization : `Bearer ${DROPBOX_TOKEN}`,
  93. 'Dropbox-API-Arg': '{\"path\": \"/rn-upload/'+filename+'\",\"mode\": \"add\",\"autorename\": true,\"mute\": false}',
  94. 'Content-Type' : 'application/octet-stream',
  95. }, RNFetchBlob.wrap(bigfile))
  96. promise.uploadProgress((now, total) => {
  97. bytesWitten = now
  98. if(Date.now() - deb < 1000)
  99. return
  100. deb = Date.now()
  101. if(begin === -1)
  102. begin = Date.now()
  103. let speed = Math.floor(now / (Date.now() - begin))
  104. report(<Info uid="100" key="progress">
  105. <Text>
  106. {`upload ${now} / ${total} bytes (${speed} kb/s)`}
  107. {` ${Math.floor((total-now)/speed/1000)} seconds left`}
  108. </Text>
  109. </Info>)
  110. })
  111. let checkpoint1 = 0
  112. Timer.setTimeout(() => {
  113. promise.cancel()
  114. }, 5000)
  115. Timer.setTimeout(() => {
  116. checkpoint1 = bytesWitten
  117. }, 6000)
  118. Timer.setTimeout(() => {
  119. report(<Assert key="data should not write to stream after task is canceled"
  120. expect={checkpoint1}
  121. actual={bytesWitten}/>)
  122. done()
  123. }, 10000)
  124. promise.then((res) => {
  125. report(
  126. <Assert key="task not canceled"
  127. expected={false}
  128. actual={true}/>)
  129. })
  130. promise.catch((resp) => {
  131. report(<Assert key="task cancelled rejection should be catachable"
  132. expect={true}
  133. actual={true}/>)
  134. })
  135. })