Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(220)

Side by Side Diff: ui/file_manager/gallery/js/gallery_item_unittest.js

Issue 988273002: Gallery.app : Truncates the file after a blob of new image is created. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add test cases. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/file_manager/gallery/js/gallery_item.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * Mock of ImageUtil. 6 * Mock of ImageUtil.
7 */ 7 */
8 var ImageUtil = { 8 var ImageUtil = {
9 getMetricName: function() {}, 9 getMetricName: function() {},
10 metrics: { 10 metrics: {
11 recordEnum: function() {}, 11 recordEnum: function() {},
12 recordInterval: function() {}, 12 recordInterval: function() {},
13 startInterval: function() {} 13 startInterval: function() {}
14 } 14 }
15 }; 15 };
16 16
17 /** 17 /**
18 * Mock of ImageEncoder 18 * Mock of ImageEncoder. Since some test changes the behavior of ImageEncoder,
19 * this is initialized in setUp().
19 */ 20 */
20 var ImageEncoder = { 21 var ImageEncoder;
21 encodeMetadata: function() {},
22 getBlob: function() {}
23 };
24 22
25 /** 23 /**
26 * Load time data. 24 * Load time data.
27 */ 25 */
28 loadTimeData.data = { 26 loadTimeData.data = {
29 DRIVE_DIRECTORY_LABEL: '', 27 DRIVE_DIRECTORY_LABEL: '',
30 DOWNLOADS_DIRECTORY_LABEL: '' 28 DOWNLOADS_DIRECTORY_LABEL: ''
31 }; 29 };
32 30
31 function setUp() {
32 ImageEncoder = {
33 encodeMetadata: function() {},
34 getBlob: function() {}
35 };
36 }
37
38 /**
39 * Returns a mock of metadata model.
40 * @private
41 * @return {!MetadataModel}
42 */
43 function getMockMetadataModel() {
44 return {
45 get: function(entries, names) {
46 return Promise.resolve([
47 {size: 200}
48 ]);
49 },
50 notifyEntriesChanged: function() {
51 }
52 };
53 }
54
33 /** 55 /**
34 * Tests for GalleryItem#saveToFile. 56 * Tests for GalleryItem#saveToFile.
35 */ 57 */
36 function testSaveToFile(callback) { 58 function testSaveToFile(callback) {
37 var fileSystem = new MockFileSystem('volumeId'); 59 var fileSystem = new MockFileSystem('volumeId');
38 fileSystem.populate(['/test.jpg']); 60 fileSystem.populate(['/test.jpg']);
39 var entry = fileSystem.entries['/test.jpg']; 61 var entry = fileSystem.entries['/test.jpg'];
40 entry.createWriter = function(callback) { 62 entry.createWriter = function(callback) {
41 callback({ 63 callback({
42 write: function() { 64 write: function() {
43 Promise.resolve().then(function() { 65 Promise.resolve().then(function() {
44 this.onwriteend(); 66 this.onwriteend();
45 }.bind(this)); 67 }.bind(this));
46 }, 68 },
47 truncate: function() { 69 truncate: function() {
48 this.write(); 70 this.write();
49 } 71 }
50 }); 72 });
51 }; 73 };
52 var entryChanged = false; 74 var entryChanged = false;
53 var metadataModel = { 75 var metadataModel = getMockMetadataModel();
54 get: function(entries, names) { 76 metadataModel.notifyEntriesChanged = function() {
55 return Promise.resolve([ 77 entryChanged = true;
56 {size: 200}
57 ]);
58 },
59 notifyEntriesChanged: function() {
60 entryChanged = true;
61 }
62 }; 78 };
79
63 var item = new Gallery.Item( 80 var item = new Gallery.Item(
64 entry, 81 entry,
65 {isReadOnly: false}, 82 {isReadOnly: false},
66 {size: 100}, 83 {size: 100},
67 {}, 84 {},
68 /* original */ true); 85 /* original */ true);
69 assertEquals(100, item.getMetadataItem().size); 86 assertEquals(100, item.getMetadataItem().size);
70 assertFalse(entryChanged); 87 assertFalse(entryChanged);
71 reportPromise( 88 reportPromise(
72 new Promise(item.saveToFile.bind( 89 new Promise(item.saveToFile.bind(
73 item, 90 item,
74 {getLocationInfo: function() { return {}; }}, 91 {getLocationInfo: function() { return {}; }},
75 metadataModel, 92 metadataModel,
76 /* fallbackDir */ null, 93 /* fallbackDir */ null,
77 /* overwrite */ true, 94 /* overwrite */ true,
78 document.createElement('canvas'))).then(function() { 95 document.createElement('canvas'))).then(function() {
79 assertEquals(200, item.getMetadataItem().size); 96 assertEquals(200, item.getMetadataItem().size);
80 assertTrue(entryChanged); 97 assertTrue(entryChanged);
81 }), callback); 98 }), callback);
82 } 99 }
100
101 /**
102 * Tests for GalleryItem#saveToFile. In this test case, fileWriter.write fails
103 * with an error.
104 */
105 function testSaveToFileWriteFailCase(callback) {
106 var fileSystem = new MockFileSystem('volumeId');
107 fileSystem.populate(['/test.jpg']);
108 var entry = fileSystem.entries['/test.jpg'];
109
110 entry.createWriter = function(callback) {
111 callback({
112 write: function() {
113 Promise.resolve().then(function() {
114 this.onerror(new Error());
115 }.bind(this));
116 },
117 truncate: function() {
118 Promise.resolve().then(function() {
119 this.onwriteend();
120 }.bind(this));
121 }
122 });
123 };
124
125 var item = new Gallery.Item(
126 entry,
127 {isReadOnly: false},
128 {size: 100},
129 {},
130 /* original */ true);
131 reportPromise(
132 new Promise(item.saveToFile.bind(
133 item,
134 {getLocationInfo: function() { return {}; }},
135 getMockMetadataModel(),
136 /* fallbackDir */ null,
137 /* overwrite */ true,
138 document.createElement('canvas'))).then(function(result) {
139 assertFalse(result);
140 }), callback);
141 }
142
143 /**
144 * Tests for GalleryItem#saveToFile. In this test case, ImageEncoder.getBlob
145 * fails with an error. This test case confirms that no write operation runs
146 * when it fails to get a blob of new image.
147 */
148 function testSaveToFileGetBlobFailCase(callback) {
149 ImageEncoder.getBlob = function() {
150 throw new Error();
151 };
152
153 var fileSystem = new MockFileSystem('volumeId');
154 fileSystem.populate(['/test.jpg']);
155 var entry = fileSystem.entries['/test.jpg'];
156
157 var writeOperationRun = false;
158 entry.createWriter = function(callback) {
159 callback({
160 write: function() {
161 Promise.resolve().then(function() {
162 writeOperationRun = true;
163 this.onwriteend();
164 }.bind(this));
165 },
166 truncate: function() {
167 Promise.resolve().then(function() {
168 writeOperationRun = true;
169 this.onwriteend();
170 }.bind(this));
171 }
172 });
173 };
174
175 var item = new Gallery.Item(
176 entry,
177 {isReadOnly: false},
178 {size: 100},
179 {},
180 /* original */ true);
181 reportPromise(
182 new Promise(item.saveToFile.bind(
183 item,
184 {getLocationInfo: function() { return {}; }},
185 getMockMetadataModel(),
186 /* fallbackDir */ null,
187 /* overwrite */ true,
188 document.createElement('canvas'))).then(function(result) {
189 assertFalse(result);
190 assertFalse(writeOperationRun);
191 }), callback);
192 }
OLDNEW
« no previous file with comments | « ui/file_manager/gallery/js/gallery_item.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698