| OLD | NEW |
| 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 } |
| OLD | NEW |