blob: cbe794027dbcc5c1310023df2db85e45a36ec875 [file] [log] [blame]
// Copyright 2014 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.
'use strict';
// Mock LoadTimeData strings.
window.loadTimeData.data = {
COPY_PROGRESS_SUMMARY: 'Copying...',
ERROR_PROGRESS_SUMMARY: '1 Error.',
ERROR_PROGRESS_SUMMARY_PLURAL: '$1 Errors.'
};
window.loadTimeData.getString = id => {
return window.loadTimeData.data_[id] || id;
};
function testSimpleProgress() {
const group = new ProgressCenterItemGroup(/* name */ 'test', /* quite */ false);
assertEquals(ProgressCenterItemGroup.State.EMPTY, group.state);
const item = new ProgressCenterItem();
item.id = 'test-item-1';
item.message = 'TestItemMessage1';
item.state = ProgressItemState.PROGRESSING;
item.progressMax = 1.0;
// Add an item.
group.update(item);
assertFalse(group.isAnimated(item.id));
assertFalse(group.isSummarizedAnimated());
assertEquals('TestItemMessage1', group.getItem(item.id).message);
assertEquals('TestItemMessage1', group.getSummarizedItem(0).message);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// Start an animation of the item.
item.progressValue = 0.5;
group.update(item);
assertTrue(group.isAnimated(item.id));
assertTrue(group.isSummarizedAnimated());
assertEquals(0.5, group.getItem(item.id).progressValue);
assertEquals(0.5, group.getSummarizedItem(0).progressValue);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// Item is completed, but the animation is still on going.
item.progressValue = 1.0;
item.state = ProgressItemState.COMPLETED;
group.update(item);
assertTrue(group.isAnimated(item.id));
assertTrue(group.isSummarizedAnimated());
assertEquals(100, group.getItem(item.id).progressRateInPercent);
assertEquals(100, group.getSummarizedItem(0).progressRateInPercent);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// The animation of the item is completed.
group.completeItemAnimation(item.id);
assertFalse(group.isAnimated(item.id));
assertTrue(group.isSummarizedAnimated());
assertEquals(null, group.getItem(item.id));
assertTrue(!!group.getSummarizedItem(0));
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// The animation of the summarized item is completed.
group.completeSummarizedItemAnimation();
assertEquals(ProgressCenterItemGroup.State.EMPTY, group.state);
}
function testCompleteAnimationDuringProgress() {
const group = new ProgressCenterItemGroup(/* name */ 'test', /* quite */ false);
const item = new ProgressCenterItem();
item.id = 'test-item-1';
item.message = 'TestItemMessage1';
item.state = ProgressItemState.PROGRESSING;
item.progressMax = 1.0;
// Add an item.
group.update(item);
assertFalse(group.isAnimated(item.id));
assertFalse(group.isSummarizedAnimated());
assertEquals('TestItemMessage1', group.getItem(item.id).message);
assertEquals('TestItemMessage1', group.getSummarizedItem(0).message);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// Start an animation of the item.
item.progressValue = 0.5;
group.update(item);
assertTrue(group.isAnimated(item.id));
assertTrue(group.isSummarizedAnimated());
assertEquals(0.5, group.getItem(item.id).progressValue);
assertEquals(0.5, group.getSummarizedItem(0).progressValue);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// The animation of the item to 50% progress is completed.
group.completeItemAnimation(item.id);
assertFalse(group.isAnimated(item.id));
assertTrue(group.isSummarizedAnimated());
assertTrue(!!group.getItem(item.id));
assertTrue(!!group.getSummarizedItem(0));
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// The animation of the summarized item to 50% progress is completed.
group.completeSummarizedItemAnimation();
assertFalse(group.isSummarizedAnimated());
assertTrue(!!group.getSummarizedItem(0));
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// The item is completed. The animation to 100% progress starts.
item.progressValue = 1.0;
item.state = ProgressItemState.COMPLETED;
group.update(item);
assertTrue(group.isAnimated(item.id));
assertTrue(group.isSummarizedAnimated());
assertEquals(100, group.getItem(item.id).progressRateInPercent);
assertEquals(100, group.getSummarizedItem(0).progressRateInPercent);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// The animation of the summarized item to 100% progress is completed.
group.completeSummarizedItemAnimation();
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// The animation of the item to 100% progress is completed.
group.completeItemAnimation(item.id);
assertFalse(group.isAnimated(item.id));
assertFalse(group.isSummarizedAnimated());
assertFalse(!!group.getItem(item.id));
assertFalse(!!group.getSummarizedItem(0));
assertEquals(ProgressCenterItemGroup.State.EMPTY, group.state);
}
function testAddMaxProgressItem() {
const group = new ProgressCenterItemGroup(/* name */ 'test', /* quite */ false);
const item = new ProgressCenterItem();
item.id = 'test-item-1';
item.message = 'TestItemMessage1';
item.state = ProgressItemState.PROGRESSING;
item.progressMax = 1.0;
item.progressValue = 1.0;
// Add an item with 100% progress.
group.update(item);
assertFalse(group.isAnimated(item.id));
assertFalse(group.isSummarizedAnimated());
assertEquals('TestItemMessage1', group.getItem(item.id).message);
assertEquals('TestItemMessage1', group.getSummarizedItem(0).message);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// Complete the item without animation.
item.state = ProgressItemState.COMPLETED;
group.update(item);
assertFalse(group.isAnimated(item.id));
assertFalse(group.isSummarizedAnimated());
assertEquals(null, group.getItem(item.id));
assertEquals(null, group.getSummarizedItem(0));
assertEquals(ProgressCenterItemGroup.State.EMPTY, group.state);
}
function testCompleteDuringAnimation() {
const group = new ProgressCenterItemGroup(/* name */ 'test', /* quite */ false);
const item = new ProgressCenterItem();
item.id = 'test-item-1';
item.message = 'TestItemMessage1';
item.state = ProgressItemState.PROGRESSING;
item.progressMax = 1.0;
item.progressValue = 0.0;
// Add an item.
group.update(item);
assertFalse(group.isAnimated(item.id));
assertFalse(group.isSummarizedAnimated());
assertEquals('TestItemMessage1', group.getItem(item.id).message);
assertEquals('TestItemMessage1', group.getSummarizedItem(0).message);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// Update the progress of the item to 100%. The animation starts.
item.progressValue = 1.0;
group.update(item);
assertTrue(group.isAnimated(item.id));
assertTrue(group.isSummarizedAnimated());
assertEquals('TestItemMessage1', group.getItem(item.id).message);
assertEquals('TestItemMessage1', group.getSummarizedItem(0).message);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// Complete the item. The animation is still on going.
item.state = ProgressItemState.COMPLETED;
group.update(item);
assertTrue(group.isAnimated(item.id));
assertTrue(group.isSummarizedAnimated());
assertTrue(!!group.getItem(item.id));
assertTrue(!!group.getSummarizedItem(0));
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
}
function testTwoItems() {
const group = new ProgressCenterItemGroup(/* name */ 'test', /* quite */ false);
const item1 = new ProgressCenterItem();
item1.id = 'test-item-1';
item1.message = 'TestItemMessage1';
item1.state = ProgressItemState.PROGRESSING;
item1.progressMax = 1.0;
item1.progressValue = 0.0;
item1.type = ProgressItemType.COPY;
const item2 = new ProgressCenterItem();
item2.id = 'test-item-2';
item2.message = 'TestItemMessage2';
item2.state = ProgressItemState.PROGRESSING;
item2.progressMax = 2.0;
item2.progressValue = 1.0;
item2.type = ProgressItemType.COPY;
// Item 1 is added.
group.update(item1);
assertFalse(group.isAnimated(item1.id));
assertFalse(group.isSummarizedAnimated());
assertEquals('TestItemMessage1', group.getItem(item1.id).message);
assertEquals('TestItemMessage1', group.getSummarizedItem(0).message);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// Item 2 is added.
group.update(item2);
assertFalse(group.isAnimated(item1.id));
assertFalse(group.isAnimated(item2.id));
assertTrue(group.isSummarizedAnimated());
assertEquals('TestItemMessage1', group.getItem(item1.id).message);
assertEquals('TestItemMessage2', group.getItem(item2.id).message);
assertEquals('Copying...', group.getSummarizedItem(0).message);
assertEquals('Copying... 1 Error.', group.getSummarizedItem(1).message);
assertEquals('Copying... 2 Errors.', group.getSummarizedItem(2).message);
assertEquals(3.0, group.getSummarizedItem(0).progressMax);
assertEquals(1.0, group.getSummarizedItem(0).progressValue);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// Item 1 is completed.
item1.state = ProgressItemState.COMPLETED;
item1.progressValue = 1.0;
group.update(item1);
assertTrue(group.isAnimated(item1.id));
assertFalse(group.isAnimated(item2.id));
assertTrue(group.isSummarizedAnimated());
assertEquals('Copying...', group.getSummarizedItem(0).message);
assertEquals(3.0, group.getSummarizedItem(0).progressMax);
assertEquals(2.0, group.getSummarizedItem(0).progressValue);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// Item 1's animation is completed.
group.completeItemAnimation(item1.id);
assertFalse(group.isAnimated(item1.id));
assertTrue(group.isSummarizedAnimated());
assertEquals('TestItemMessage2', group.getSummarizedItem(0).message);
assertEquals(3.0, group.getSummarizedItem(0).progressMax);
assertEquals(2.0, group.getSummarizedItem(0).progressValue);
assertFalse(!!group.getItem(item1.id));
assertTrue(!!group.getItem(item2.id));
// Item 2 is completed.
item2.state = ProgressItemState.COMPLETED;
item2.progressValue = 2.0;
group.update(item2);
assertTrue(group.isSummarizedAnimated());
assertEquals('TestItemMessage2', group.getSummarizedItem(0).message);
assertEquals(ProgressItemState.COMPLETED, group.getSummarizedItem(0).state);
assertEquals(3.0, group.getSummarizedItem(0).progressMax);
assertEquals(3.0, group.getSummarizedItem(0).progressValue);
assertTrue(!!group.getItem(item2.id));
// Item 2's animation is completed.
group.completeItemAnimation(item2.id);
assertFalse(group.isAnimated(item2.id));
assertFalse(!!group.getItem(item2.id));
assertEquals(3.0, group.getSummarizedItem(0).progressMax);
assertEquals(3.0, group.getSummarizedItem(0).progressValue);
assertEquals(ProgressItemState.COMPLETED, group.getSummarizedItem(0).state);
assertTrue(group.isSummarizedAnimated());
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// Summarized item's animation is completed.
group.completeSummarizedItemAnimation();
assertFalse(!!group.getSummarizedItem(0));
assertFalse(group.isSummarizedAnimated());
assertEquals(ProgressCenterItemGroup.State.EMPTY, group.state);
}
function testOneError() {
const group = new ProgressCenterItemGroup(/* name */ 'test', /* quite */ false);
const item1 = new ProgressCenterItem();
item1.id = 'test-item-1';
item1.message = 'TestItemMessage1';
item1.state = ProgressItemState.PROGRESSING;
item1.progressMax = 2.0;
item1.progressValue = 1.0;
item1.type = ProgressItemType.COPY;
// Item 1 is added.
group.update(item1);
// Item 1 becomes error.
item1.message = "Error.";
item1.state = ProgressItemState.ERROR;
group.update(item1);
assertTrue(!!group.getItem(item1.id));
assertFalse(group.isAnimated(item1.id));
assertEquals(null, group.getSummarizedItem(0));
assertFalse(group.isSummarizedAnimated());
assertEquals(ProgressCenterItemGroup.State.INACTIVE, group.state);
// Add another item without dismissing the error item.
const item2 = new ProgressCenterItem();
item2.id = 'test-item-2';
item2.message = 'TestItemMessage2';
item2.state = ProgressItemState.PROGRESSING;
item2.progressMax = 4.0;
item2.progressValue = 1.0;
item2.type = ProgressItemType.COPY;
// Item 2 is added.
group.update(item2);
assertTrue(!!group.getItem(item1.id));
assertTrue(!!group.getItem(item2.id));
assertEquals('Copying... 1 Error.', group.getSummarizedItem(0).message);
assertEquals(4.0, group.getSummarizedItem(0).progressMax);
assertEquals(1.0, group.getSummarizedItem(0).progressValue);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// Dismiss the error item.
group.dismissErrorItem(item1.id);
assertFalse(!!group.getItem(item1.id));
assertTrue(!!group.getItem(item2.id));
assertEquals('TestItemMessage2', group.getSummarizedItem(0).message);
assertEquals(4.0, group.getSummarizedItem(0).progressMax);
assertEquals(1.0, group.getSummarizedItem(0).progressValue);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
}
function testOneItemWithError() {
const group = new ProgressCenterItemGroup(/* name */ 'test', /* quite */ false);
const item1 = new ProgressCenterItem();
item1.id = 'test-item-1';
item1.message = 'TestItemMessage1';
item1.state = ProgressItemState.PROGRESSING;
item1.progressMax = 1.0;
item1.progressValue = 0.0;
item1.type = ProgressItemType.COPY;
const item2 = new ProgressCenterItem();
item2.id = 'test-item-2';
item2.message = 'TestItemMessage2';
item2.state = ProgressItemState.PROGRESSING;
item2.progressMax = 2.0;
item2.progressValue = 1.0;
item2.type = ProgressItemType.COPY;
// Item 1 is added.
group.update(item1);
// Item 2 is added.
group.update(item2);
// Item 2 becomes error.
item2.state = ProgressItemState.ERROR;
item2.message = 'Error message.';
group.update(item2);
assertFalse(group.isAnimated(item1.id));
assertFalse(group.isAnimated(item2.id));
assertFalse(group.isSummarizedAnimated());
assertEquals('Copying... 1 Error.', group.getSummarizedItem(0).message);
assertEquals('Copying... 2 Errors.', group.getSummarizedItem(1).message);
assertEquals(1.0, group.getSummarizedItem(0).progressMax);
assertEquals(0.0, group.getSummarizedItem(0).progressValue);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// Item 1 is completed.
item1.state = ProgressItemState.COMPLETED;
item1.progressValue = 1.0;
group.update(item1);
assertTrue(group.isAnimated(item1.id));
assertFalse(group.isAnimated(item2.id));
assertTrue(group.isSummarizedAnimated());
assertEquals('Copying... 1 Error.', group.getSummarizedItem(0).message);
assertEquals(1.0, group.getSummarizedItem(0).progressMax);
assertEquals(1.0, group.getSummarizedItem(0).progressValue);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// Item 1's animation is completed.
group.completeItemAnimation(item1.id);
// Summarized item's animation is completed.
group.completeSummarizedItemAnimation();
assertFalse(group.isAnimated(item1.id));
assertFalse(group.isSummarizedAnimated());
assertFalse(!!group.getSummarizedItem(0));
assertEquals('Error message.',
ProgressCenterItemGroup.getSummarizedErrorItem(group).message);
assertEquals('2 Errors.',
ProgressCenterItemGroup.getSummarizedErrorItem(
group, group).message);
assertFalse(!!group.getItem(item1.id));
assertTrue(!!group.getItem(item2.id));
assertEquals('Error message.',
ProgressCenterItemGroup.getSummarizedErrorItem(group).message);
assertFalse(group.isSummarizedAnimated());
assertEquals(ProgressCenterItemGroup.State.INACTIVE, group.state);
// Dismiss error item.
group.dismissErrorItem(item2.id);
assertFalse(!!group.getItem(item2.id));
assertEquals(ProgressCenterItemGroup.State.EMPTY, group.state);
}
function testOneItemWithErrorDuringAnimation() {
const group = new ProgressCenterItemGroup(/* name */ 'test', /* quite */ false);
const item1 = new ProgressCenterItem();
item1.id = 'test-item-1';
item1.message = 'TestItemMessage1';
item1.state = ProgressItemState.PROGRESSING;
item1.progressMax = 1.0;
item1.progressValue = 0.0;
item1.type = ProgressItemType.COPY;
const item2 = new ProgressCenterItem();
item2.id = 'test-item-2';
item2.message = 'TestItemMessage2';
item2.state = ProgressItemState.PROGRESSING;
item2.progressMax = 2.0;
item2.progressValue = 1.0;
item2.type = ProgressItemType.COPY;
// Item 1 is added.
group.update(item1);
// Item 2 is added.
group.update(item2);
// Item 2 starts an animation.
item2.progressValue = 1.5;
group.update(item2);
assertTrue(group.isAnimated(item2.id));
assertTrue(group.isSummarizedAnimated());
// Item 2 enters the error state.
item2.state = ProgressItemState.ERROR;
item2.message = 'Error message.';
group.update(item2);
assertFalse(group.isAnimated(item2.id));
assertFalse(group.isSummarizedAnimated());
assertEquals('Copying... 1 Error.', group.getSummarizedItem(0).message);
assertEquals('Copying... 2 Errors.', group.getSummarizedItem(1).message);
assertEquals(1.0, group.getSummarizedItem(0).progressMax);
assertEquals(0.0, group.getSummarizedItem(0).progressValue);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
}
function testTwoErrors() {
const group = new ProgressCenterItemGroup(/* name */ 'test', /* quite */ false);
const item1 = new ProgressCenterItem();
item1.id = 'test-item-1';
item1.message = 'Error message 1';
item1.state = ProgressItemState.ERROR;
item1.type = ProgressItemType.COPY;
const item2 = new ProgressCenterItem();
item2.id = 'test-item-2';
item2.message = 'Error message 2';
item2.state = ProgressItemState.ERROR;
item2.type = ProgressItemType.COPY;
// Add an error item.
group.update(item1);
assertFalse(group.isAnimated(item1.id));
assertFalse(group.isSummarizedAnimated());
assertEquals('Error message 1',
ProgressCenterItemGroup.getSummarizedErrorItem(group).message);
assertEquals(ProgressCenterItemGroup.State.INACTIVE, group.state);
// Add another error item.
group.update(item2);
assertTrue(!!group.getItem(item1.id));
assertTrue(!!group.getItem(item2.id));
assertFalse(group.isAnimated(item2.id));
assertFalse(group.isSummarizedAnimated());
assertEquals('2 Errors.',
ProgressCenterItemGroup.getSummarizedErrorItem(group).message);
assertEquals(ProgressCenterItemGroup.State.INACTIVE, group.state);
// Dismiss Error message 1.
group.dismissErrorItem(item1.id);
assertFalse(!!group.getItem(item1.id));
assertTrue(!!group.getItem(item2.id));
assertEquals('Error message 2',
ProgressCenterItemGroup.getSummarizedErrorItem(group).message);
assertEquals(ProgressCenterItemGroup.State.INACTIVE, group.state);
}
function testCancel() {
const group = new ProgressCenterItemGroup(/* name */ 'test', /* quite */ false);
const item = new ProgressCenterItem();
item.id = 'test-item-1';
item.message = 'TestItemMessage1';
item.state = ProgressItemState.PROGRESSING;
item.progressMax = 1.0;
item.progressValue = 0.0;
item.type = ProgressItemType.COPY;
// Add an item.
group.update(item);
// Start an animation of the item.
item.progressValue = 0.5;
group.update(item);
// Cancel the item.
item.state = ProgressItemState.CANCELED;
group.update(item);
assertFalse(group.isAnimated(item.id));
assertFalse(group.isSummarizedAnimated());
assertEquals(null, group.getItem(item.id));
assertEquals(null, group.getSummarizedItem(0));
assertEquals(ProgressCenterItemGroup.State.EMPTY, group.state);
}
function testCancelWithError() {
const group = new ProgressCenterItemGroup(/* name */ 'test', /* quite */ false);
const item1 = new ProgressCenterItem();
item1.id = 'test-item-1';
item1.message = 'TestItemMessage1';
item1.state = ProgressItemState.PROGRESSING;
item1.progressMax = 1.0;
item1.progressValue = 0.0;
item1.type = ProgressItemType.COPY;
const item2 = new ProgressCenterItem();
item2.id = 'test-item-2';
item2.message = 'Error message 2';
item2.state = ProgressItemState.ERROR;
item2.type = ProgressItemType.COPY;
// Add an item.
group.update(item1);
// Start an animation of the item.
item1.progressValue = 0.5;
group.update(item1);
// Add an error item.
group.update(item2);
// Cancel the item.
item1.state = ProgressItemState.CANCELED;
group.update(item1);
assertFalse(group.isAnimated(item1.id));
assertFalse(group.isAnimated(item2.id));
assertFalse(group.isSummarizedAnimated());
assertEquals(null, group.getItem(item1.id));
assertTrue(!!group.getItem(item2.id));
assertEquals(null, group.getSummarizedItem(0));
assertEquals('Error message 2',
ProgressCenterItemGroup.getSummarizedErrorItem(group).message);
assertEquals(ProgressCenterItemGroup.State.INACTIVE, group.state);
}
function testQuietItem() {
const group = new ProgressCenterItemGroup(/* name */ 'test', /* quite */ true);
const item = new ProgressCenterItem();
item.id = 'test-item-1';
item.message = 'TestItemMessage1';
item.state = ProgressItemState.PROGRESSING;
item.progressMax = 1.0;
item.quiet = true;
// Add an item.
group.update(item);
assertFalse(group.isAnimated(item.id));
assertFalse(group.isSummarizedAnimated());
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// Start an animation of the item.
item.progressValue = 0.5;
group.update(item);
assertTrue(group.isAnimated(item.id));
// Summarized item should not animated because the panel does not show
// progress bar for quiet and summarized item.
assertFalse(group.isSummarizedAnimated());
assertEquals(0.5, group.getItem(item.id).progressValue);
assertEquals(0.5, group.getSummarizedItem(0).progressValue);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// Item is completed, but the animation is still on going.
item.progressValue = 1.0;
item.state = ProgressItemState.COMPLETED;
group.update(item);
assertTrue(group.isAnimated(item.id));
assertFalse(group.isSummarizedAnimated());
assertEquals(100, group.getItem(item.id).progressRateInPercent);
assertEquals(100, group.getSummarizedItem(0).progressRateInPercent);
assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state);
// The animation of the item is completed.
group.completeItemAnimation(item.id);
assertFalse(group.isAnimated(item.id));
assertFalse(group.isSummarizedAnimated());
assertEquals(null, group.getItem(item.id));
assertFalse(!!group.getSummarizedItem(0));
assertEquals(ProgressCenterItemGroup.State.EMPTY, group.state);
}