| 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 |