| Index: ui/file_manager/gallery/js/gallery_item_unittest.js
 | 
| diff --git a/ui/file_manager/gallery/js/gallery_item_unittest.js b/ui/file_manager/gallery/js/gallery_item_unittest.js
 | 
| index 613bbb2be38808dd401ec1f57610026cd0145495..a5f487cd112e29a39cea5f4d986846f0801722b6 100644
 | 
| --- a/ui/file_manager/gallery/js/gallery_item_unittest.js
 | 
| +++ b/ui/file_manager/gallery/js/gallery_item_unittest.js
 | 
| @@ -15,12 +15,10 @@ var ImageUtil = {
 | 
|  };
 | 
|  
 | 
|  /**
 | 
| - * Mock of ImageEncoder
 | 
| + * Mock of ImageEncoder. Since some test changes the behavior of ImageEncoder,
 | 
| + * this is initialized in setUp().
 | 
|   */
 | 
| -var ImageEncoder = {
 | 
| -  encodeMetadata: function() {},
 | 
| -  getBlob: function() {}
 | 
| -};
 | 
| +var ImageEncoder;
 | 
|  
 | 
|  /**
 | 
|   * Load time data.
 | 
| @@ -30,6 +28,30 @@ loadTimeData.data = {
 | 
|    DOWNLOADS_DIRECTORY_LABEL: ''
 | 
|  };
 | 
|  
 | 
| +function setUp() {
 | 
| +  ImageEncoder = {
 | 
| +    encodeMetadata: function() {},
 | 
| +    getBlob: function() {}
 | 
| +  };
 | 
| +}
 | 
| +
 | 
| +/**
 | 
| + * Returns a mock of metadata model.
 | 
| + * @private
 | 
| + * @return {!MetadataModel}
 | 
| + */
 | 
| +function getMockMetadataModel() {
 | 
| +  return {
 | 
| +    get: function(entries, names) {
 | 
| +      return Promise.resolve([
 | 
| +        {size: 200}
 | 
| +      ]);
 | 
| +    },
 | 
| +    notifyEntriesChanged: function() {
 | 
| +    }
 | 
| +  };
 | 
| +}
 | 
| +
 | 
|  /**
 | 
|   * Tests for GalleryItem#saveToFile.
 | 
|   */
 | 
| @@ -50,16 +72,11 @@ function testSaveToFile(callback) {
 | 
|      });
 | 
|    };
 | 
|    var entryChanged = false;
 | 
| -  var metadataModel = {
 | 
| -    get: function(entries, names) {
 | 
| -      return Promise.resolve([
 | 
| -        {size: 200}
 | 
| -      ]);
 | 
| -    },
 | 
| -    notifyEntriesChanged: function() {
 | 
| -      entryChanged = true;
 | 
| -    }
 | 
| +  var metadataModel = getMockMetadataModel();
 | 
| +  metadataModel.notifyEntriesChanged = function() {
 | 
| +    entryChanged = true;
 | 
|    };
 | 
| +
 | 
|    var item = new Gallery.Item(
 | 
|        entry,
 | 
|        {isReadOnly: false},
 | 
| @@ -80,3 +97,96 @@ function testSaveToFile(callback) {
 | 
|              assertTrue(entryChanged);
 | 
|            }), callback);
 | 
|  }
 | 
| +
 | 
| +/**
 | 
| + * Tests for GalleryItem#saveToFile. In this test case, fileWriter.write fails
 | 
| + * with an error.
 | 
| + */
 | 
| +function testSaveToFileWriteFailCase(callback) {
 | 
| +  var fileSystem = new MockFileSystem('volumeId');
 | 
| +  fileSystem.populate(['/test.jpg']);
 | 
| +  var entry = fileSystem.entries['/test.jpg'];
 | 
| +
 | 
| +  entry.createWriter = function(callback) {
 | 
| +    callback({
 | 
| +      write: function() {
 | 
| +        Promise.resolve().then(function() {
 | 
| +          this.onerror(new Error());
 | 
| +        }.bind(this));
 | 
| +      },
 | 
| +      truncate: function() {
 | 
| +        Promise.resolve().then(function() {
 | 
| +          this.onwriteend();
 | 
| +        }.bind(this));
 | 
| +      }
 | 
| +    });
 | 
| +  };
 | 
| +
 | 
| +  var item = new Gallery.Item(
 | 
| +      entry,
 | 
| +      {isReadOnly: false},
 | 
| +      {size: 100},
 | 
| +      {},
 | 
| +      /* original */ true);
 | 
| +  reportPromise(
 | 
| +      new Promise(item.saveToFile.bind(
 | 
| +          item,
 | 
| +          {getLocationInfo: function() { return {}; }},
 | 
| +          getMockMetadataModel(),
 | 
| +          /* fallbackDir */ null,
 | 
| +          /* overwrite */ true,
 | 
| +          document.createElement('canvas'))).then(function(result) {
 | 
| +            assertFalse(result);
 | 
| +          }), callback);
 | 
| +}
 | 
| +
 | 
| +/**
 | 
| + * Tests for GalleryItem#saveToFile. In this test case, ImageEncoder.getBlob
 | 
| + * fails with an error. This test case confirms that no write operation runs
 | 
| + * when it fails to get a blob of new image.
 | 
| + */
 | 
| +function testSaveToFileGetBlobFailCase(callback) {
 | 
| +  ImageEncoder.getBlob = function() {
 | 
| +    throw new Error();
 | 
| +  };
 | 
| +
 | 
| +  var fileSystem = new MockFileSystem('volumeId');
 | 
| +  fileSystem.populate(['/test.jpg']);
 | 
| +  var entry = fileSystem.entries['/test.jpg'];
 | 
| +
 | 
| +  var writeOperationRun = false;
 | 
| +  entry.createWriter = function(callback) {
 | 
| +    callback({
 | 
| +      write: function() {
 | 
| +        Promise.resolve().then(function() {
 | 
| +          writeOperationRun = true;
 | 
| +          this.onwriteend();
 | 
| +        }.bind(this));
 | 
| +      },
 | 
| +      truncate: function() {
 | 
| +        Promise.resolve().then(function() {
 | 
| +          writeOperationRun = true;
 | 
| +          this.onwriteend();
 | 
| +        }.bind(this));
 | 
| +      }
 | 
| +    });
 | 
| +  };
 | 
| +
 | 
| +  var item = new Gallery.Item(
 | 
| +      entry,
 | 
| +      {isReadOnly: false},
 | 
| +      {size: 100},
 | 
| +      {},
 | 
| +      /* original */ true);
 | 
| +  reportPromise(
 | 
| +      new Promise(item.saveToFile.bind(
 | 
| +          item,
 | 
| +          {getLocationInfo: function() { return {}; }},
 | 
| +          getMockMetadataModel(),
 | 
| +          /* fallbackDir */ null,
 | 
| +          /* overwrite */ true,
 | 
| +          document.createElement('canvas'))).then(function(result) {
 | 
| +            assertFalse(result);
 | 
| +            assertFalse(writeOperationRun);
 | 
| +          }), callback);
 | 
| +}
 | 
| 
 |