Commit 0ad9e350 authored by Noel Gordon's avatar Noel Gordon Committed by Commit Bot

Closure compile actions_model_unittest

 - remove actions_model_unittest.html
 - add BUILD rules to auto-generate and compile this unittest
 - make mock_drive_sync_handler visible to foreground unittests
 - Add Closure @type defines to unittest variables (OMG).
 - fix Closure compile errors

Bug: 911005
Change-Id: Ia29ca0e11ee984f00daf66271ff65e5fcb52b1c7
Reviewed-on: https://chromium-review.googlesource.com/c/1356732
Commit-Queue: Noel Gordon <noel@chromium.org>
Reviewed-by: default avatarLuciano Pacheco <lucmult@chromium.org>
Reviewed-by: default avatarSam McNally <sammc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#613024}
parent 7755d286
......@@ -15,8 +15,7 @@ IN_PROC_BROWSER_TEST_F(FileManagerJsTest, ActionsSubmenuTest) {
}
IN_PROC_BROWSER_TEST_F(FileManagerJsTest, ActionsModelTest) {
RunTest(base::FilePath(
FILE_PATH_LITERAL("foreground/js/actions_model_unittest.html")));
RunGeneratedTest("/foreground/js/actions_model_unittest.html");
}
IN_PROC_BROWSER_TEST_F(FileManagerJsTest, NavigationListModelTest) {
......
......@@ -182,6 +182,8 @@ js_library("mock_drive_sync_handler") {
"//ui/webui/resources/js/cr:event_target",
]
externs_list = [ "../../../externs/background/drive_sync_handler.js" ]
visibility = []
visibility = [ "//ui/file_manager/file_manager/*" ]
}
js_library("drive_sync_handler") {
......
......@@ -151,6 +151,17 @@ js_library("mock_actions_model") {
]
}
js_unittest("actions_model_unittest") {
deps = [
":actions_model",
"metadata:mock_metadata",
"//ui/file_manager/base/js:mock_chrome",
"//ui/file_manager/base/js:test_error_reporting",
"//ui/file_manager/file_manager/background/js:mock_drive_sync_handler",
"//ui/file_manager/file_manager/background/js:mock_volume_manager",
]
}
js_library("mock_directory_model") {
testonly = true
deps = [
......@@ -710,6 +721,7 @@ js_library("webui_command_extender") {
js_unit_tests("unit_tests") {
deps = [
":actions_model_unittest",
":file_list_model_unittest",
":navigation_list_model_unittest",
":progress_center_item_group_unittest",
......
<!DOCTYPE html>
<!-- Copyright 2015 The Chromium Authors. All rights reserved.
-- Use of this source code is governed by a BSD-style license that can be
-- found in the LICENSE file.
-->
<script src="../../../../../ui/webui/resources/js/assert.js"></script>
<script src="../../../../../ui/webui/resources/js/cr.js"></script>
<script src="../../../../../ui/webui/resources/js/cr/event_target.js"></script>
<script src="../../../../../ui/webui/resources/js/cr/ui/array_data_model.js"></script>
<script src="../../../../../ui/webui/resources/js/load_time_data.js"></script>
<script src="../../foreground/js/metadata/mock_metadata.js"></script>
<script src="../../common/js/mock_entry.js"></script>
<script src="../../../base/js/test_error_reporting.js"></script>
<script src="../../../base/js/mock_chrome.js"></script>
<script src="../../common/js/unittest_util.js"></script>
<script src="../../common/js/files_app_entry_types.js"></script>
<script src="../../common/js/util.js"></script>
<script src="../../../base/js/volume_manager_types.js"></script>
<script src="../../background/js/entry_location_impl.js"></script>
<script src="../../background/js/volume_info_impl.js"></script>
<script src="../../background/js/volume_info_list_impl.js"></script>
<script src="../../background/js/volume_manager_factory.js"></script>
<script src="../../background/js/volume_manager_impl.js"></script>
<script src="../../background/js/volume_manager_util.js"></script>
<script src="../../background/js/mock_volume_manager.js"></script>
<script src="../../background/js/mock_drive_sync_handler.js"></script>
<script src="actions_model.js"></script>
<script src="actions_model_unittest.js"></script>
......@@ -2,14 +2,33 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
var volumeManager = null;
var metadataModel = null;
var shortcutsModel = null;
var driveSyncHandler = null;
var ui = null;
var driveFileSystem = null;
var providedFileSystem = null;
'use strict';
/**
* @type {!MockVolumeManager}
*/
var volumeManager;
/**
* @type {!FileSystem}
*/
var driveFileSystem;
/**
* @type {!FileSystem}
*/
var providedFileSystem;
/**
* @type {!MockDriveSyncHandler}
*/
var driveSyncHandler;
/**
* MockFolderShortcutsModel
* @extends {FolderShortcutsDataModel}
* @constructor
*/
function MockFolderShortcutsModel() {
this.has = false;
}
......@@ -20,75 +39,102 @@ MockFolderShortcutsModel.prototype.exists = function() {
MockFolderShortcutsModel.prototype.add = function(entry) {
this.has = true;
return 0;
};
MockFolderShortcutsModel.prototype.remove = function(entry) {
this.has = false;
return 0;
};
/**
* @type {!MockFolderShortcutsModel}
*/
var shortcutsModel;
/**
* MockUI
* @extends {ActionModelUI}
* @constructor
*/
function MockUI() {
this.listContainer = {
this.listContainer = /** @type {!ListContainer} */ ({
currentView: {
updateListItemsMetadata: function() {
updateListItemsMetadata: function() {},
}
}
};
});
this.alertDialog = {
showHtml: function() {
}
};
this.alertDialog = /** @type {!FilesAlertDialog} */ ({
showHtml: function() {},
});
this.errorDialog = /** @type {!ErrorDialog} */ ({
showHtml: function() {},
});
}
/**
* @type {!MockUI}
*/
var ui;
function setUp() {
// Mock loadTimeData strings.
window.loadTimeData.getString = id => id;
window.loadTimeData.data = {};
window.chrome = {
// Mock Chrome APIs.
var mockChrome = {
runtime: {
lastError: null
lastError: null,
},
fileManagerPrivate: {
// The following closures are set per test case.
getCustomActions: null,
executeCustomAction: null,
pinDriveFile: null
pinDriveFile: null,
},
};
installMockChrome(mockChrome);
new MockCommandLinePrivate();
// Setup Drive file system.
volumeManager = new MockVolumeManager();
volumeManager.createVolumeInfo(
VolumeManagerCommon.VolumeType.PROVIDED,
'provided',
'Provided');
var type = VolumeManagerCommon.VolumeType.DRIVE;
driveFileSystem =
assert(volumeManager.getCurrentProfileVolumeInfo(type).fileSystem);
driveFileSystem = volumeManager.getCurrentProfileVolumeInfo(
VolumeManagerCommon.VolumeType.DRIVE).fileSystem;
providedFileSystem = volumeManager.getCurrentProfileVolumeInfo(
VolumeManagerCommon.VolumeType.PROVIDED).fileSystem;
// Setup Provided file system.
type = VolumeManagerCommon.VolumeType.PROVIDED;
volumeManager.createVolumeInfo(type, 'provided', 'Provided');
providedFileSystem =
assert(volumeManager.getCurrentProfileVolumeInfo(type).fileSystem);
metadataModel = new MockMetadataModel(null);
// Create mock action model components.
shortcutsModel = new MockFolderShortcutsModel();
driveSyncHandler = new MockDriveSyncHandler();
ui = new MockUI();
}
/**
* Tests that the correct actions are available for a directory in Google Drive.
* Tests that the correct actions are available for a Google Drive directory.
*/
function testDriveDirectoryEntry(callback) {
driveFileSystem.entries['/test'] =
new MockDirectoryEntry(driveFileSystem, '/test', {});
new MockDirectoryEntry(driveFileSystem, '/test');
var metadataModel = new MockMetadataModel({
canShare: true,
});
var model = new ActionsModel(volumeManager, metadataModel, shortcutsModel,
driveSyncHandler, ui, [driveFileSystem.entries['/test']]);
metadataModel.properties = {
canShare: true,
};
var invalidated = 0;
model.addEventListener('invalidated', function() {
invalidated++;
});
return reportPromise(model.initialize().then(function() {
var actions = model.getActions();
assertEquals(3, Object.keys(actions).length);
......@@ -141,19 +187,21 @@ function testDriveDirectoryEntry(callback) {
}
/**
* Tests that the correct actions are available for a file in Google Drive.
* Tests that the correct actions are available for a Google Drive file.
*/
function testDriveFileEntry(callback) {
driveFileSystem.entries['/test.txt'] =
new MockFileEntry(driveFileSystem, '/test.txt', {});
new MockFileEntry(driveFileSystem, '/test.txt');
var metadataModel = new MockMetadataModel({
hosted: false,
pinned: false,
});
var model = new ActionsModel(volumeManager, metadataModel, shortcutsModel,
driveSyncHandler, ui, [driveFileSystem.entries['/test.txt']]);
var invalidated = 0;
metadataModel.properties = {
hosted: false,
pinned: false
};
return reportPromise(model.initialize().then(function() {
var actions = model.getActions();
assertEquals(3, Object.keys(actions).length);
......@@ -238,14 +286,16 @@ function testDriveFileEntry(callback) {
*/
function testTeamDriveRootEntry(callback) {
driveFileSystem.entries['/team_drives/ABC Team'] =
new MockDirectoryEntry(driveFileSystem, '/team_drives/ABC Team', {});
new MockDirectoryEntry(driveFileSystem, '/team_drives/ABC Team');
var metadataModel = new MockMetadataModel({
canShare: true,
});
var model = new ActionsModel(
volumeManager, metadataModel, shortcutsModel, driveSyncHandler, ui,
[driveFileSystem.entries['/team_drives/ABC Team']]);
metadataModel.properties = {
canShare: true,
};
return reportPromise(
model.initialize().then(function() {
var actions = model.getActions();
......@@ -270,15 +320,16 @@ function testTeamDriveRootEntry(callback) {
*/
function testTeamDriveDirectoryEntry(callback) {
driveFileSystem.entries['/team_drives/ABC Team/Folder 1'] =
new MockDirectoryEntry(
driveFileSystem, '/team_drives/ABC Team/Folder 1', {});
new MockDirectoryEntry(driveFileSystem, '/team_drives/ABC Team/Folder 1');
var metadataModel = new MockMetadataModel({
canShare: true,
});
var model = new ActionsModel(
volumeManager, metadataModel, shortcutsModel, driveSyncHandler, ui,
[driveFileSystem.entries['/team_drives/ABC Team/Folder 1']]);
metadataModel.properties = {
canShare: true,
};
return reportPromise(
model.initialize().then(function() {
var actions = model.getActions();
......@@ -310,12 +361,17 @@ function testTeamDriveDirectoryEntry(callback) {
function testTeamDriveFileEntry(callback) {
driveFileSystem.entries['/team_drives/ABC Team/Folder 1/test.txt'] =
new MockFileEntry(
driveFileSystem, '/team_drives/ABC Team/Folder 1/test.txt', {});
driveFileSystem, '/team_drives/ABC Team/Folder 1/test.txt');
var metadataModel = new MockMetadataModel({
hosted: false,
pinned: false,
});
var model = new ActionsModel(
volumeManager, metadataModel, shortcutsModel, driveSyncHandler, ui,
[driveFileSystem.entries['/team_drives/ABC Team/Folder 1/test.txt']]);
metadataModel.properties = {hosted: false, pinned: false};
return reportPromise(
model.initialize().then(function() {
var actions = model.getActions();
......@@ -347,7 +403,7 @@ function testTeamDriveFileEntry(callback) {
*/
function testProvidedEntry(callback) {
providedFileSystem.entries['/test'] =
new MockDirectoryEntry(providedFileSystem, '/test', {});
new MockDirectoryEntry(providedFileSystem, '/test');
chrome.fileManagerPrivate.getCustomActions = function(entries, callback) {
assertEquals(1, entries.length);
......@@ -364,12 +420,16 @@ function testProvidedEntry(callback) {
]);
};
var metadataModel = new MockMetadataModel(null);
var model = new ActionsModel(volumeManager, metadataModel, shortcutsModel,
driveSyncHandler, ui, [providedFileSystem.entries['/test']]);
var invalidated = 0;
model.addEventListener('invalidated', function() {
invalidated++;
});
return reportPromise(model.initialize().then(function() {
var actions = model.getActions();
assertEquals(2, Object.keys(actions).length);
......@@ -417,17 +477,20 @@ function testProvidedEntry(callback) {
*/
function testProvidedEntryWithError(callback) {
providedFileSystem.entries['/test'] =
new MockDirectoryEntry(providedFileSystem, '/test', {});
new MockDirectoryEntry(providedFileSystem, '/test');
chrome.fileManagerPrivate.getCustomActions = function(entries, callback) {
chrome.runtime.lastError = {
message: 'Failed to fetch custom actions.'
};
callback(null);
callback(['error']);
};
var metadataModel = new MockMetadataModel(null);
var model = new ActionsModel(volumeManager, metadataModel, shortcutsModel,
driveSyncHandler, ui, [providedFileSystem.entries['/test']]);
return reportPromise(model.initialize().then(function() {
var actions = model.getActions();
assertEquals(0, Object.keys(actions).length);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment