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) { ...@@ -15,8 +15,7 @@ IN_PROC_BROWSER_TEST_F(FileManagerJsTest, ActionsSubmenuTest) {
} }
IN_PROC_BROWSER_TEST_F(FileManagerJsTest, ActionsModelTest) { IN_PROC_BROWSER_TEST_F(FileManagerJsTest, ActionsModelTest) {
RunTest(base::FilePath( RunGeneratedTest("/foreground/js/actions_model_unittest.html");
FILE_PATH_LITERAL("foreground/js/actions_model_unittest.html")));
} }
IN_PROC_BROWSER_TEST_F(FileManagerJsTest, NavigationListModelTest) { IN_PROC_BROWSER_TEST_F(FileManagerJsTest, NavigationListModelTest) {
......
...@@ -182,6 +182,8 @@ js_library("mock_drive_sync_handler") { ...@@ -182,6 +182,8 @@ js_library("mock_drive_sync_handler") {
"//ui/webui/resources/js/cr:event_target", "//ui/webui/resources/js/cr:event_target",
] ]
externs_list = [ "../../../externs/background/drive_sync_handler.js" ] externs_list = [ "../../../externs/background/drive_sync_handler.js" ]
visibility = []
visibility = [ "//ui/file_manager/file_manager/*" ]
} }
js_library("drive_sync_handler") { js_library("drive_sync_handler") {
......
...@@ -151,6 +151,17 @@ js_library("mock_actions_model") { ...@@ -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") { js_library("mock_directory_model") {
testonly = true testonly = true
deps = [ deps = [
...@@ -710,6 +721,7 @@ js_library("webui_command_extender") { ...@@ -710,6 +721,7 @@ js_library("webui_command_extender") {
js_unit_tests("unit_tests") { js_unit_tests("unit_tests") {
deps = [ deps = [
":actions_model_unittest",
":file_list_model_unittest", ":file_list_model_unittest",
":navigation_list_model_unittest", ":navigation_list_model_unittest",
":progress_center_item_group_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 @@ ...@@ -2,14 +2,33 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
var volumeManager = null; 'use strict';
var metadataModel = null;
var shortcutsModel = null;
var driveSyncHandler = null;
var ui = null;
var driveFileSystem = null;
var providedFileSystem = null;
/**
* @type {!MockVolumeManager}
*/
var volumeManager;
/**
* @type {!FileSystem}
*/
var driveFileSystem;
/**
* @type {!FileSystem}
*/
var providedFileSystem;
/**
* @type {!MockDriveSyncHandler}
*/
var driveSyncHandler;
/**
* MockFolderShortcutsModel
* @extends {FolderShortcutsDataModel}
* @constructor
*/
function MockFolderShortcutsModel() { function MockFolderShortcutsModel() {
this.has = false; this.has = false;
} }
...@@ -20,75 +39,102 @@ MockFolderShortcutsModel.prototype.exists = function() { ...@@ -20,75 +39,102 @@ MockFolderShortcutsModel.prototype.exists = function() {
MockFolderShortcutsModel.prototype.add = function(entry) { MockFolderShortcutsModel.prototype.add = function(entry) {
this.has = true; this.has = true;
return 0;
}; };
MockFolderShortcutsModel.prototype.remove = function(entry) { MockFolderShortcutsModel.prototype.remove = function(entry) {
this.has = false; this.has = false;
return 0;
}; };
/**
* @type {!MockFolderShortcutsModel}
*/
var shortcutsModel;
/**
* MockUI
* @extends {ActionModelUI}
* @constructor
*/
function MockUI() { function MockUI() {
this.listContainer = { this.listContainer = /** @type {!ListContainer} */ ({
currentView: { currentView: {
updateListItemsMetadata: function() { updateListItemsMetadata: function() {},
}
} }
}; });
this.alertDialog = { this.alertDialog = /** @type {!FilesAlertDialog} */ ({
showHtml: function() { showHtml: function() {},
} });
};
this.errorDialog = /** @type {!ErrorDialog} */ ({
showHtml: function() {},
});
} }
/**
* @type {!MockUI}
*/
var ui;
function setUp() { function setUp() {
// Mock loadTimeData strings.
window.loadTimeData.getString = id => id; window.loadTimeData.getString = id => id;
window.loadTimeData.data = {}; window.loadTimeData.data = {};
window.chrome = {
// Mock Chrome APIs.
var mockChrome = {
runtime: { runtime: {
lastError: null lastError: null,
}, },
fileManagerPrivate: { fileManagerPrivate: {
// The following closures are set per test case. // The following closures are set per test case.
getCustomActions: null, getCustomActions: null,
executeCustomAction: null, executeCustomAction: null,
pinDriveFile: null pinDriveFile: null,
}, },
}; };
installMockChrome(mockChrome);
new MockCommandLinePrivate(); new MockCommandLinePrivate();
// Setup Drive file system.
volumeManager = new MockVolumeManager(); volumeManager = new MockVolumeManager();
volumeManager.createVolumeInfo( var type = VolumeManagerCommon.VolumeType.DRIVE;
VolumeManagerCommon.VolumeType.PROVIDED, driveFileSystem =
'provided', assert(volumeManager.getCurrentProfileVolumeInfo(type).fileSystem);
'Provided');
driveFileSystem = volumeManager.getCurrentProfileVolumeInfo( // Setup Provided file system.
VolumeManagerCommon.VolumeType.DRIVE).fileSystem; type = VolumeManagerCommon.VolumeType.PROVIDED;
providedFileSystem = volumeManager.getCurrentProfileVolumeInfo( volumeManager.createVolumeInfo(type, 'provided', 'Provided');
VolumeManagerCommon.VolumeType.PROVIDED).fileSystem; providedFileSystem =
assert(volumeManager.getCurrentProfileVolumeInfo(type).fileSystem);
metadataModel = new MockMetadataModel(null); // Create mock action model components.
shortcutsModel = new MockFolderShortcutsModel(); shortcutsModel = new MockFolderShortcutsModel();
driveSyncHandler = new MockDriveSyncHandler(); driveSyncHandler = new MockDriveSyncHandler();
ui = new MockUI(); 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) { function testDriveDirectoryEntry(callback) {
driveFileSystem.entries['/test'] = driveFileSystem.entries['/test'] =
new MockDirectoryEntry(driveFileSystem, '/test', {}); new MockDirectoryEntry(driveFileSystem, '/test');
var metadataModel = new MockMetadataModel({
canShare: true,
});
var model = new ActionsModel(volumeManager, metadataModel, shortcutsModel, var model = new ActionsModel(volumeManager, metadataModel, shortcutsModel,
driveSyncHandler, ui, [driveFileSystem.entries['/test']]); driveSyncHandler, ui, [driveFileSystem.entries['/test']]);
metadataModel.properties = {
canShare: true,
};
var invalidated = 0; var invalidated = 0;
model.addEventListener('invalidated', function() { model.addEventListener('invalidated', function() {
invalidated++; invalidated++;
}); });
return reportPromise(model.initialize().then(function() { return reportPromise(model.initialize().then(function() {
var actions = model.getActions(); var actions = model.getActions();
assertEquals(3, Object.keys(actions).length); assertEquals(3, Object.keys(actions).length);
...@@ -141,19 +187,21 @@ function testDriveDirectoryEntry(callback) { ...@@ -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) { function testDriveFileEntry(callback) {
driveFileSystem.entries['/test.txt'] = 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, var model = new ActionsModel(volumeManager, metadataModel, shortcutsModel,
driveSyncHandler, ui, [driveFileSystem.entries['/test.txt']]); driveSyncHandler, ui, [driveFileSystem.entries['/test.txt']]);
var invalidated = 0; var invalidated = 0;
metadataModel.properties = {
hosted: false,
pinned: false
};
return reportPromise(model.initialize().then(function() { return reportPromise(model.initialize().then(function() {
var actions = model.getActions(); var actions = model.getActions();
assertEquals(3, Object.keys(actions).length); assertEquals(3, Object.keys(actions).length);
...@@ -238,14 +286,16 @@ function testDriveFileEntry(callback) { ...@@ -238,14 +286,16 @@ function testDriveFileEntry(callback) {
*/ */
function testTeamDriveRootEntry(callback) { function testTeamDriveRootEntry(callback) {
driveFileSystem.entries['/team_drives/ABC Team'] = 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( var model = new ActionsModel(
volumeManager, metadataModel, shortcutsModel, driveSyncHandler, ui, volumeManager, metadataModel, shortcutsModel, driveSyncHandler, ui,
[driveFileSystem.entries['/team_drives/ABC Team']]); [driveFileSystem.entries['/team_drives/ABC Team']]);
metadataModel.properties = {
canShare: true,
};
return reportPromise( return reportPromise(
model.initialize().then(function() { model.initialize().then(function() {
var actions = model.getActions(); var actions = model.getActions();
...@@ -270,15 +320,16 @@ function testTeamDriveRootEntry(callback) { ...@@ -270,15 +320,16 @@ function testTeamDriveRootEntry(callback) {
*/ */
function testTeamDriveDirectoryEntry(callback) { function testTeamDriveDirectoryEntry(callback) {
driveFileSystem.entries['/team_drives/ABC Team/Folder 1'] = driveFileSystem.entries['/team_drives/ABC Team/Folder 1'] =
new MockDirectoryEntry( new MockDirectoryEntry(driveFileSystem, '/team_drives/ABC Team/Folder 1');
driveFileSystem, '/team_drives/ABC Team/Folder 1', {});
var metadataModel = new MockMetadataModel({
canShare: true,
});
var model = new ActionsModel( var model = new ActionsModel(
volumeManager, metadataModel, shortcutsModel, driveSyncHandler, ui, volumeManager, metadataModel, shortcutsModel, driveSyncHandler, ui,
[driveFileSystem.entries['/team_drives/ABC Team/Folder 1']]); [driveFileSystem.entries['/team_drives/ABC Team/Folder 1']]);
metadataModel.properties = {
canShare: true,
};
return reportPromise( return reportPromise(
model.initialize().then(function() { model.initialize().then(function() {
var actions = model.getActions(); var actions = model.getActions();
...@@ -310,12 +361,17 @@ function testTeamDriveDirectoryEntry(callback) { ...@@ -310,12 +361,17 @@ function testTeamDriveDirectoryEntry(callback) {
function testTeamDriveFileEntry(callback) { function testTeamDriveFileEntry(callback) {
driveFileSystem.entries['/team_drives/ABC Team/Folder 1/test.txt'] = driveFileSystem.entries['/team_drives/ABC Team/Folder 1/test.txt'] =
new MockFileEntry( 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( var model = new ActionsModel(
volumeManager, metadataModel, shortcutsModel, driveSyncHandler, ui, volumeManager, metadataModel, shortcutsModel, driveSyncHandler, ui,
[driveFileSystem.entries['/team_drives/ABC Team/Folder 1/test.txt']]); [driveFileSystem.entries['/team_drives/ABC Team/Folder 1/test.txt']]);
metadataModel.properties = {hosted: false, pinned: false};
return reportPromise( return reportPromise(
model.initialize().then(function() { model.initialize().then(function() {
var actions = model.getActions(); var actions = model.getActions();
...@@ -347,7 +403,7 @@ function testTeamDriveFileEntry(callback) { ...@@ -347,7 +403,7 @@ function testTeamDriveFileEntry(callback) {
*/ */
function testProvidedEntry(callback) { function testProvidedEntry(callback) {
providedFileSystem.entries['/test'] = providedFileSystem.entries['/test'] =
new MockDirectoryEntry(providedFileSystem, '/test', {}); new MockDirectoryEntry(providedFileSystem, '/test');
chrome.fileManagerPrivate.getCustomActions = function(entries, callback) { chrome.fileManagerPrivate.getCustomActions = function(entries, callback) {
assertEquals(1, entries.length); assertEquals(1, entries.length);
...@@ -364,12 +420,16 @@ function testProvidedEntry(callback) { ...@@ -364,12 +420,16 @@ function testProvidedEntry(callback) {
]); ]);
}; };
var metadataModel = new MockMetadataModel(null);
var model = new ActionsModel(volumeManager, metadataModel, shortcutsModel, var model = new ActionsModel(volumeManager, metadataModel, shortcutsModel,
driveSyncHandler, ui, [providedFileSystem.entries['/test']]); driveSyncHandler, ui, [providedFileSystem.entries['/test']]);
var invalidated = 0; var invalidated = 0;
model.addEventListener('invalidated', function() { model.addEventListener('invalidated', function() {
invalidated++; invalidated++;
}); });
return reportPromise(model.initialize().then(function() { return reportPromise(model.initialize().then(function() {
var actions = model.getActions(); var actions = model.getActions();
assertEquals(2, Object.keys(actions).length); assertEquals(2, Object.keys(actions).length);
...@@ -417,17 +477,20 @@ function testProvidedEntry(callback) { ...@@ -417,17 +477,20 @@ function testProvidedEntry(callback) {
*/ */
function testProvidedEntryWithError(callback) { function testProvidedEntryWithError(callback) {
providedFileSystem.entries['/test'] = providedFileSystem.entries['/test'] =
new MockDirectoryEntry(providedFileSystem, '/test', {}); new MockDirectoryEntry(providedFileSystem, '/test');
chrome.fileManagerPrivate.getCustomActions = function(entries, callback) { chrome.fileManagerPrivate.getCustomActions = function(entries, callback) {
chrome.runtime.lastError = { chrome.runtime.lastError = {
message: 'Failed to fetch custom actions.' message: 'Failed to fetch custom actions.'
}; };
callback(null); callback(['error']);
}; };
var metadataModel = new MockMetadataModel(null);
var model = new ActionsModel(volumeManager, metadataModel, shortcutsModel, var model = new ActionsModel(volumeManager, metadataModel, shortcutsModel,
driveSyncHandler, ui, [providedFileSystem.entries['/test']]); driveSyncHandler, ui, [providedFileSystem.entries['/test']]);
return reportPromise(model.initialize().then(function() { return reportPromise(model.initialize().then(function() {
var actions = model.getActions(); var actions = model.getActions();
assertEquals(0, Object.keys(actions).length); 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