1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 | 'use strict';
|
23 |
|
24 | var _network = require('../../display/network');
|
25 |
|
26 | describe('network', function () {
|
27 | var pdf1 = new URL('../pdfs/tracemonkey.pdf', window.location).href;
|
28 | var pdf1Length = 1016315;
|
29 | var pdf2 = new URL('../pdfs/pdf.pdf', window.location).href;
|
30 | var pdf2Length = 32472771;
|
31 | it('read without stream and range', function (done) {
|
32 | var stream = new _network.PDFNetworkStream({
|
33 | url: pdf1,
|
34 | rangeChunkSize: 65536,
|
35 | disableStream: true,
|
36 | disableRange: true
|
37 | });
|
38 | var fullReader = stream.getFullReader();
|
39 | var isStreamingSupported, isRangeSupported;
|
40 | var promise = fullReader.headersReady.then(function () {
|
41 | isStreamingSupported = fullReader.isStreamingSupported;
|
42 | isRangeSupported = fullReader.isRangeSupported;
|
43 | });
|
44 | var len = 0,
|
45 | count = 0;
|
46 | var read = function read() {
|
47 | return fullReader.read().then(function (result) {
|
48 | if (result.done) {
|
49 | return;
|
50 | }
|
51 | count++;
|
52 | len += result.value.byteLength;
|
53 | return read();
|
54 | });
|
55 | };
|
56 | var readPromise = Promise.all([read(), promise]);
|
57 | readPromise.then(function (page) {
|
58 | expect(len).toEqual(pdf1Length);
|
59 | expect(count).toEqual(1);
|
60 | expect(isStreamingSupported).toEqual(false);
|
61 | expect(isRangeSupported).toEqual(false);
|
62 | done();
|
63 | }).catch(function (reason) {
|
64 | done.fail(reason);
|
65 | });
|
66 | });
|
67 | it('read with streaming', function (done) {
|
68 | var userAgent = window.navigator.userAgent;
|
69 | var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(userAgent);
|
70 | if (!m || m[1] < 9) {
|
71 | expect(true).toEqual(true);
|
72 | done();
|
73 | return;
|
74 | }
|
75 | var stream = new _network.PDFNetworkStream({
|
76 | url: pdf2,
|
77 | rangeChunkSize: 65536,
|
78 | disableStream: false,
|
79 | disableRange: false
|
80 | });
|
81 | var fullReader = stream.getFullReader();
|
82 | var isStreamingSupported, isRangeSupported;
|
83 | var promise = fullReader.headersReady.then(function () {
|
84 | isStreamingSupported = fullReader.isStreamingSupported;
|
85 | isRangeSupported = fullReader.isRangeSupported;
|
86 | });
|
87 | var len = 0,
|
88 | count = 0;
|
89 | var read = function read() {
|
90 | return fullReader.read().then(function (result) {
|
91 | if (result.done) {
|
92 | return;
|
93 | }
|
94 | count++;
|
95 | len += result.value.byteLength;
|
96 | return read();
|
97 | });
|
98 | };
|
99 | var readPromise = Promise.all([read(), promise]);
|
100 | readPromise.then(function () {
|
101 | expect(len).toEqual(pdf2Length);
|
102 | expect(count).toBeGreaterThan(1);
|
103 | expect(isStreamingSupported).toEqual(true);
|
104 | expect(isRangeSupported).toEqual(true);
|
105 | done();
|
106 | }).catch(function (reason) {
|
107 | done.fail(reason);
|
108 | });
|
109 | });
|
110 | it('read custom ranges', function (done) {
|
111 | var rangeSize = 32768;
|
112 | var stream = new _network.PDFNetworkStream({
|
113 | url: pdf1,
|
114 | length: pdf1Length,
|
115 | rangeChunkSize: rangeSize,
|
116 | disableStream: true,
|
117 | disableRange: false
|
118 | });
|
119 | var fullReader = stream.getFullReader();
|
120 | var isStreamingSupported, isRangeSupported, fullReaderCancelled;
|
121 | var promise = fullReader.headersReady.then(function () {
|
122 | isStreamingSupported = fullReader.isStreamingSupported;
|
123 | isRangeSupported = fullReader.isRangeSupported;
|
124 | fullReader.cancel('Don\'t need full reader');
|
125 | fullReaderCancelled = true;
|
126 | });
|
127 | var tailSize = pdf1Length % rangeSize || rangeSize;
|
128 | var range1Reader = stream.getRangeReader(pdf1Length - tailSize - rangeSize, pdf1Length - tailSize);
|
129 | var range2Reader = stream.getRangeReader(pdf1Length - tailSize, pdf1Length);
|
130 | var result1 = { value: 0 },
|
131 | result2 = { value: 0 };
|
132 | var read = function read(reader, lenResult) {
|
133 | return reader.read().then(function (result) {
|
134 | if (result.done) {
|
135 | return;
|
136 | }
|
137 | lenResult.value += result.value.byteLength;
|
138 | return read(reader, lenResult);
|
139 | });
|
140 | };
|
141 | var readPromises = Promise.all([read(range1Reader, result1), read(range2Reader, result2), promise]);
|
142 | readPromises.then(function () {
|
143 | expect(result1.value).toEqual(rangeSize);
|
144 | expect(result2.value).toEqual(tailSize);
|
145 | expect(isStreamingSupported).toEqual(false);
|
146 | expect(isRangeSupported).toEqual(true);
|
147 | expect(fullReaderCancelled).toEqual(true);
|
148 | done();
|
149 | }).catch(function (reason) {
|
150 | done.fail(reason);
|
151 | });
|
152 | });
|
153 | }); |
\ | No newline at end of file |