blob: 8ec5fac8dde4f392562295d7b035f74c06ca3ab9 [file] [log] [blame]
// Copyright 2019 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.
const {assert} = chai;
import * as Common from '../../../../front_end/common/common.js';
import {default as WorkspaceImpl, ProjectStore, projectTypes} from '../../../../front_end/workspace/WorkspaceImpl.js';
import {default as UISourceCode} from '../../../../front_end/workspace/UISourceCode.js';
describe('ProjectStore', () => {
it('can be instantiated correctly', () => {
const testName = 'Test Project';
const workspaceImpl = new WorkspaceImpl();
const testProjectStore = new ProjectStore(workspaceImpl, 1, projectTypes.Service, testName);
assert.equal(testProjectStore.id(), 1, 'ID was not set correctly');
assert.equal(testProjectStore.type(), projectTypes.Service, 'type was not set correctly');
assert.equal(testProjectStore.displayName(), testName, 'display name was not set correctly');
assert.deepEqual(testProjectStore.workspace(), workspaceImpl, 'display name was not set correctly');
});
it('can be removed from workspace', () => {
const testName = 'Test Project';
const workspaceImpl = new WorkspaceImpl();
const testProjectStore = new ProjectStore(workspaceImpl, 1, projectTypes.Service, testName);
testProjectStore.removeProject();
assert.isNull(workspaceImpl.project(1), 'the project was not removed');
});
it('is able to add a UI source code', () => {
const workspaceImpl = new WorkspaceImpl();
const testResourceCategory =
new Common.ResourceType.ResourceCategory('Category Test Title', 'Category Test Short Title');
const resourceType =
new Common.ResourceType.ResourceType('Type Test Name', 'Type Test Title', testResourceCategory, true);
const testProjectStore = new ProjectStore(workspaceImpl, 1, projectTypes.Service, 'Test Project');
const testUISourceCode = new UISourceCode(testProjectStore, 'www.test.com', resourceType);
testProjectStore.addUISourceCode(testUISourceCode);
assert.deepEqual(
testProjectStore.uiSourceCodes(), [testUISourceCode], 'UI source code was not added or retrieved successfully');
});
it('returns false when trying to add a UI source code that has already been added', () => {
const workspaceImpl = new WorkspaceImpl();
const testResourceCategory =
new Common.ResourceType.ResourceCategory('Category Test Title', 'Category Test Short Title');
const resourceType =
new Common.ResourceType.ResourceType('Type Test Name', 'Type Test Title', testResourceCategory, true);
const testProjectStore = new ProjectStore(workspaceImpl, 1, projectTypes.Service, 'Test Project');
const testUISourceCode = new UISourceCode(testProjectStore, 'www.test.com', resourceType);
testProjectStore.addUISourceCode(testUISourceCode);
const result = testProjectStore.addUISourceCode(testUISourceCode);
assert.isFalse(result, 'addUISourceCode function did not return false');
});
it('is able to remove a UI source code using the URL', () => {
const workspaceImpl = new WorkspaceImpl();
const testResourceCategory =
new Common.ResourceType.ResourceCategory('Category Test Title', 'Category Test Short Title');
const resourceType =
new Common.ResourceType.ResourceType('Type Test Name', 'Type Test Title', testResourceCategory, true);
const testProjectStore = new ProjectStore(workspaceImpl, 1, projectTypes.Service, 'Test Project');
const testUISourceCode = new UISourceCode(testProjectStore, 'www.test.com', resourceType);
testProjectStore.addUISourceCode(testUISourceCode);
assert.deepEqual(
testProjectStore.uiSourceCodes(), [testUISourceCode], 'UI source code was not added or retrieved successfully');
testProjectStore.removeUISourceCode('www.test.com');
assert.deepEqual(testProjectStore.uiSourceCodes(), [], 'UI source code was not removed successfully');
});
it('returns undefined when trying to remove a UI source code using a URL that does not exist', () => {
const workspaceImpl = new WorkspaceImpl();
const testProjectStore = new ProjectStore(workspaceImpl, 1, projectTypes.Service, 'Test Project');
const result = testProjectStore.removeUISourceCode('www.test.com');
assert.isUndefined(result, 'removeUISourceCode did not return undefined');
});
it('is able to rename a UI source code', () => {
const workspaceImpl = new WorkspaceImpl();
const testResourceCategory =
new Common.ResourceType.ResourceCategory('Category Test Title', 'Category Test Short Title');
const resourceType =
new Common.ResourceType.ResourceType('Type Test Name', 'Type Test Title', testResourceCategory, true);
const testProjectStore = new ProjectStore(workspaceImpl, 1, projectTypes.Service, 'Test Project');
const testUISourceCode = new UISourceCode(testProjectStore, 'www.test.com', resourceType);
testProjectStore.addUISourceCode(testUISourceCode);
testProjectStore.renameUISourceCode(testUISourceCode, 'www.newTest.com');
assert.deepEqual(
testProjectStore.uiSourceCodeForURL('www.newTest.com'), testUISourceCode,
'UI source code was not renamed successfully');
});
});
describe('WorkspaceImpl', () => {
it('can be instantiated correctly', () => {
const workspaceImpl = new WorkspaceImpl();
assert.deepEqual(workspaceImpl.projects(), [], 'workspace projects should be empty');
assert.isFalse(
workspaceImpl.hasResourceContentTrackingExtensions(),
'workspace should have resource content tracking extensions set to False');
});
it('can have a project added to it', () => {
const workspaceImpl = new WorkspaceImpl();
const testProjectStore = new ProjectStore(workspaceImpl, 1, projectTypes.Service, 'Test Project');
workspaceImpl.addProject(testProjectStore);
assert.deepEqual(workspaceImpl.projects(), [testProjectStore], 'project was not added successfully');
});
it('can retrieve a project using its ID', () => {
const workspaceImpl = new WorkspaceImpl();
const testProjectStore1 = new ProjectStore(workspaceImpl, 1, projectTypes.Service, 'Test Project 1');
const testProjectStore2 = new ProjectStore(workspaceImpl, 2, projectTypes.Service, 'Test Project 2');
const testProjectStore3 = new ProjectStore(workspaceImpl, 3, projectTypes.Service, 'Test Project 3');
workspaceImpl.addProject(testProjectStore1);
workspaceImpl.addProject(testProjectStore2);
workspaceImpl.addProject(testProjectStore3);
assert.equal(workspaceImpl.project(2), testProjectStore2, 'project retrieved was not correct');
});
it('returns Null if it tried to find a project ID that does not exist', () => {
const workspaceImpl = new WorkspaceImpl();
const testProjectStore1 = new ProjectStore(workspaceImpl, 1, projectTypes.Service, 'Test Project 1');
const testProjectStore2 = new ProjectStore(workspaceImpl, 2, projectTypes.Service, 'Test Project 2');
const testProjectStore3 = new ProjectStore(workspaceImpl, 3, projectTypes.Service, 'Test Project 3');
workspaceImpl.addProject(testProjectStore1);
workspaceImpl.addProject(testProjectStore2);
workspaceImpl.addProject(testProjectStore3);
assert.isNull(workspaceImpl.project(4), 'result returned should be null');
});
it('returns Null when trying to retrieve UI source code for URL from a certain project if the URL does not exist',
() => {
const workspaceImpl = new WorkspaceImpl();
const testProjectStore = new ProjectStore(workspaceImpl, 1, projectTypes.Service, 'Test Project');
workspaceImpl.addProject(testProjectStore);
const result = workspaceImpl.uiSourceCode(1, 'www.test.com');
assert.isNull(result, 'function did not return Null');
});
it('is able to return UI source code for URL from a certain project', () => {
const workspaceImpl = new WorkspaceImpl();
const testResourceCategory =
new Common.ResourceType.ResourceCategory('Category Test Title', 'Category Test Short Title');
const resourceType =
new Common.ResourceType.ResourceType('Type Test Name', 'Type Test Title', testResourceCategory, true);
const testProjectStore = new ProjectStore(workspaceImpl, 1, projectTypes.Service, 'Test Project');
const testUISourceCode = new UISourceCode(testProjectStore, 'www.test.com', resourceType);
testProjectStore.addUISourceCode(testUISourceCode);
workspaceImpl.addProject(testProjectStore);
const result = workspaceImpl.uiSourceCode(1, 'www.test.com');
assert.deepEqual(result, testUISourceCode, 'function did not return the correct UI source code');
});
it('returns Null when trying to retrieve UI source code for URL from all projects if the URL does not exist', () => {
const workspaceImpl = new WorkspaceImpl();
const testProjectStore = new ProjectStore(workspaceImpl, 1, projectTypes.Service, 'Test Project');
workspaceImpl.addProject(testProjectStore);
const result = workspaceImpl.uiSourceCodeForURL('www.test.com');
assert.isNull(result, 'function did not return Null');
});
it('is able to return all the UI source codes given the URL from all the projects', () => {
const workspaceImpl = new WorkspaceImpl();
const testResourceCategory =
new Common.ResourceType.ResourceCategory('Category Test Title', 'Category Test Short Title');
const resourceType =
new Common.ResourceType.ResourceType('Type Test Name', 'Type Test Title', testResourceCategory, true);
const testProjectStore1 = new ProjectStore(workspaceImpl, 1, projectTypes.Service, 'Test Project 1');
const testUISourceCode1 = new UISourceCode(testProjectStore1, 'www.test1.com', resourceType);
testProjectStore1.addUISourceCode(testUISourceCode1);
const testProjectStore2 = new ProjectStore(workspaceImpl, 2, projectTypes.Debugger, 'Test Project 2');
const testUISourceCode2 = new UISourceCode(testProjectStore2, 'www.test2.com', resourceType);
testProjectStore2.addUISourceCode(testUISourceCode2);
const testProjectStore3 = new ProjectStore(workspaceImpl, 3, projectTypes.Service, 'Test Project 3');
const testUISourceCode3 = new UISourceCode(testProjectStore3, 'www.test3.com', resourceType);
testProjectStore3.addUISourceCode(testUISourceCode3);
workspaceImpl.addProject(testProjectStore1);
workspaceImpl.addProject(testProjectStore2);
workspaceImpl.addProject(testProjectStore3);
const result = workspaceImpl.uiSourceCodeForURL('www.test2.com');
assert.deepEqual(result, testUISourceCode2, 'function did not return the correct UI source code');
});
it('returns UI source codes for a certain type', () => {
const workspaceImpl = new WorkspaceImpl();
const testResourceCategory =
new Common.ResourceType.ResourceCategory('Category Test Title', 'Category Test Short Title');
const resourceType =
new Common.ResourceType.ResourceType('Type Test Name', 'Type Test Title', testResourceCategory, true);
const testProjectStore1 = new ProjectStore(workspaceImpl, 1, projectTypes.Service, 'Test Project 1');
const testUISourceCode1 = new UISourceCode(testProjectStore1, 'www.test1.com', resourceType);
testProjectStore1.addUISourceCode(testUISourceCode1);
const testProjectStore2 = new ProjectStore(workspaceImpl, 2, projectTypes.Debugger, 'Test Project 2');
const testUISourceCode2 = new UISourceCode(testProjectStore2, 'www.test2.com', resourceType);
testProjectStore2.addUISourceCode(testUISourceCode2);
const testProjectStore3 = new ProjectStore(workspaceImpl, 3, projectTypes.Service, 'Test Project 3');
const testUISourceCode3 = new UISourceCode(testProjectStore3, 'www.test3.com', resourceType);
testProjectStore3.addUISourceCode(testUISourceCode3);
workspaceImpl.addProject(testProjectStore1);
workspaceImpl.addProject(testProjectStore2);
workspaceImpl.addProject(testProjectStore3);
const result = workspaceImpl.uiSourceCodesForProjectType(projectTypes.Service);
assert.deepEqual(result, [testUISourceCode1, testUISourceCode3], 'UI source codes were not returned correctly');
});
it('can retrieve projects given a certain type', () => {
const workspaceImpl = new WorkspaceImpl();
const testProjectStore1 = new ProjectStore(workspaceImpl, 1, projectTypes.Service, 'Test Project 1');
const testProjectStore2 = new ProjectStore(workspaceImpl, 2, projectTypes.Debugger, 'Test Project 2');
const testProjectStore3 = new ProjectStore(workspaceImpl, 3, projectTypes.Service, 'Test Project 3');
workspaceImpl.addProject(testProjectStore1);
workspaceImpl.addProject(testProjectStore2);
workspaceImpl.addProject(testProjectStore3);
assert.deepEqual(
workspaceImpl.projectsForType(projectTypes.Service), [testProjectStore1, testProjectStore3],
'projects were not retrieved correctly');
});
it('returns UI source codes for all its projects', () => {
const workspaceImpl = new WorkspaceImpl();
const testResourceCategory =
new Common.ResourceType.ResourceCategory('Category Test Title', 'Category Test Short Title');
const resourceType =
new Common.ResourceType.ResourceType('Type Test Name', 'Type Test Title', testResourceCategory, true);
const testProjectStore1 = new ProjectStore(workspaceImpl, 1, projectTypes.Service, 'Test Project 1');
const testUISourceCode1 = new UISourceCode(testProjectStore1, 'www.test1.com', resourceType);
testProjectStore1.addUISourceCode(testUISourceCode1);
const testProjectStore2 = new ProjectStore(workspaceImpl, 2, projectTypes.Debugger, 'Test Project 2');
const testUISourceCode2 = new UISourceCode(testProjectStore2, 'www.test2.com', resourceType);
testProjectStore2.addUISourceCode(testUISourceCode2);
const testProjectStore3 = new ProjectStore(workspaceImpl, 3, projectTypes.Service, 'Test Project 3');
const testUISourceCode3 = new UISourceCode(testProjectStore3, 'www.test3.com', resourceType);
testProjectStore3.addUISourceCode(testUISourceCode3);
workspaceImpl.addProject(testProjectStore1);
workspaceImpl.addProject(testProjectStore2);
workspaceImpl.addProject(testProjectStore3);
const result = workspaceImpl.uiSourceCodes();
assert.deepEqual(
result, [testUISourceCode1, testUISourceCode2, testUISourceCode3],
'UI source codes were not returned correctly');
});
it('is able to set whether or not it has resource content tracking extensions', () => {
const workspaceImpl = new WorkspaceImpl();
assert.isFalse(
workspaceImpl.hasResourceContentTrackingExtensions(),
'workspace should have resource content tracking extensions set to False');
workspaceImpl.setHasResourceContentTrackingExtensions(true);
assert.isTrue(
workspaceImpl.hasResourceContentTrackingExtensions(),
'workspace should have resource content tracking extensions set to True');
});
});