Commit f68aa3bf authored by Michael Checo's avatar Michael Checo Committed by Chromium LUCI CQ

Diagnostics: Routine section styling

Screenshot: http://shortn/_Y2KIJpUWPu

Spec: https://carbon.googleplex.com/cros-ux/pages/diagnostics/mvp#8834837d-1583-4a5f-b1a5-b0eef63be7ac

Notes:
 - Styling for "queued" state is currently not represented in
 the spec which makes it subject to further change.
 - "Stopped" badge state will be added in a follow-up CL that implements
 routine cancellation.

Bug: 1125150
Test: browser_tests --gtest_filter=DiagnosticsApp*
Change-Id: I9144ef846a7553042d16edd5a075f5158a4ae9f7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2567932
Commit-Queue: Michael Checo <michaelcheco@google.com>
Reviewed-by: default avatarZentaro Kavanagh <zentaro@chromium.org>
Cr-Commit-Position: refs/heads/master@{#842707}
parent a4735caf
...@@ -241,6 +241,7 @@ js_library("routine_section_test") { ...@@ -241,6 +241,7 @@ js_library("routine_section_test") {
"//chromeos/components/diagnostics_ui/resources:routine_result_entry", "//chromeos/components/diagnostics_ui/resources:routine_result_entry",
"//chromeos/components/diagnostics_ui/resources:routine_section", "//chromeos/components/diagnostics_ui/resources:routine_section",
"//chromeos/components/diagnostics_ui/resources:text_badge", "//chromeos/components/diagnostics_ui/resources:text_badge",
"//third_party/polymer/v3_0/components-chromium/iron-collapse:iron-collapse",
"//ui/webui/resources/cr_elements/cr_button:cr_button.m", "//ui/webui/resources/cr_elements/cr_button:cr_button.m",
] ]
} }
......
...@@ -95,19 +95,6 @@ export function getToggleTestReportButtonFromSection(element) { ...@@ -95,19 +95,6 @@ export function getToggleTestReportButtonFromSection(element) {
return button; return button;
} }
/**
* Helper function for getting the Show/Hide Tests Report button from a
* routine-section.
* @param {?RoutineSectionElement} element
* @return {!CrButtonElement}
*/
export function getLearnMoreButtonFromSection(element) {
const button =
/** @type {!CrButtonElement} */ (element.$$('#learnMoreButton'));
assertTrue(!!button);
return button;
}
/** /**
* Helper function to check if a substring exists in an element. * Helper function to check if a substring exists in an element.
* @param {?Element} element * @param {?Element} element
......
...@@ -10,7 +10,9 @@ import {BadgeType} from 'chrome://diagnostics/text_badge.js'; ...@@ -10,7 +10,9 @@ import {BadgeType} from 'chrome://diagnostics/text_badge.js';
import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js'; import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
import {flushTasks} from '../../test_util.m.js'; import {flushTasks, isVisible} from '../../test_util.m.js';
import * as dx_utils from './diagnostics_test_utils.js';
export function routineResultEntryTestSuite() { export function routineResultEntryTestSuite() {
/** @type {?RoutineResultEntryElement} */ /** @type {?RoutineResultEntryElement} */
...@@ -124,9 +126,12 @@ export function routineResultEntryTestSuite() { ...@@ -124,9 +126,12 @@ export function routineResultEntryTestSuite() {
'routineEntryText', 'routineEntryText',
loadTimeData.getString('cpuStressRoutineText'))); loadTimeData.getString('cpuStressRoutineText')));
// Status should be empty if the test is not started. // Status should be queued if the test is not started.
// TODO(joonbug): Utilize isVisible util function. assertTrue(isVisible(getStatusBadge()));
assertTrue(getStatusBadge().hidden); assertEquals(getStatusBadge().badgeType, BadgeType.QUEUED);
dx_utils.assertTextContains(
getStatusBadge().value,
loadTimeData.getString('testQueuedBadgeText'));
}); });
}); });
...@@ -142,8 +147,10 @@ export function routineResultEntryTestSuite() { ...@@ -142,8 +147,10 @@ export function routineResultEntryTestSuite() {
loadTimeData.getString('cpuStressRoutineText'))); loadTimeData.getString('cpuStressRoutineText')));
// Status should be running. // Status should be running.
assertEquals(getStatusBadge().value, 'RUNNING'); dx_utils.assertTextContains(
assertEquals(getStatusBadge().badgeType, BadgeType.DEFAULT); getStatusBadge().value,
loadTimeData.getString('testRunningBadgeText'));
assertEquals(getStatusBadge().badgeType, BadgeType.RUNNING);
}); });
}); });
......
...@@ -14,7 +14,7 @@ import {BadgeType} from 'chrome://diagnostics/text_badge.js'; ...@@ -14,7 +14,7 @@ import {BadgeType} from 'chrome://diagnostics/text_badge.js';
import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js'; import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
import {flushTasks} from '../../test_util.m.js'; import {flushTasks, isVisible} from '../../test_util.m.js';
import * as dx_utils from './diagnostics_test_utils.js'; import * as dx_utils from './diagnostics_test_utils.js';
...@@ -105,14 +105,6 @@ export function routineSectionTestSuite() { ...@@ -105,14 +105,6 @@ export function routineSectionTestSuite() {
return button; return button;
} }
/**
* Returns the learn more help button.
* @return {!CrButtonElement}
*/
function getLearnMoreButton() {
return dx_utils.getLearnMoreButtonFromSection(routineSectionElement);
}
/** /**
* Returns the status badge. * Returns the status badge.
* @return {!TextBadgeElement} * @return {!TextBadgeElement}
...@@ -124,11 +116,14 @@ export function routineSectionTestSuite() { ...@@ -124,11 +116,14 @@ export function routineSectionTestSuite() {
/** /**
* Returns the status text. * Returns the status text.
* TODO(joonbug): Update this type for use with assertElementContainsText * @return {!HTMLElement}
* @return {?Element}
*/ */
function getStatusTextElement() { function getStatusTextElement() {
return routineSectionElement.$$('#testStatusText'); const statusText =
/** @type {!HTMLElement} */ (
routineSectionElement.$$('#testStatusText'));
assertTrue(!!statusText);
return statusText;
} }
/** /**
...@@ -165,6 +160,14 @@ export function routineSectionTestSuite() { ...@@ -165,6 +160,14 @@ export function routineSectionTestSuite() {
return dx_utils.getResultEntries(getResultList()); return dx_utils.getResultEntries(getResultList());
} }
/**
* Returns whether the "result list" section is expanded or not.
* @return {boolean}
*/
function isIronCollapseOpen() {
return routineSectionElement.$.collapse.opened;
}
test('ElementRenders', () => { test('ElementRenders', () => {
return initializeRoutineSection([]).then(() => { return initializeRoutineSection([]).then(() => {
// Verify the element rendered. // Verify the element rendered.
...@@ -198,32 +201,29 @@ export function routineSectionTestSuite() { ...@@ -198,32 +201,29 @@ export function routineSectionTestSuite() {
chromeos.diagnostics.mojom.RoutineType.kCpuFloatingPoint, chromeos.diagnostics.mojom.RoutineType.kCpuFloatingPoint,
]; ];
// TODO(joonbug): Use visibility assert over testing .hidden attr.
return initializeRoutineSection(routines) return initializeRoutineSection(routines)
.then(() => { .then(() => {
// Hidden by default. // Hidden by default.
assertTrue(getResultList().hidden); assertFalse(isIronCollapseOpen());
assertTrue(getToggleTestReportButton().hidden); assertFalse(isVisible(getToggleTestReportButton()));
return clickRunTestsButton(); return clickRunTestsButton();
}) })
.then(() => { .then(() => {
// Report is still hidden by default, but toggle button is visible. // Report is still hidden by default, but toggle button is visible.
assertTrue(getResultList().hidden); assertFalse(isIronCollapseOpen());
assertFalse(getToggleTestReportButton().hidden); assertTrue(isVisible(getToggleTestReportButton()));
return clickToggleTestReportButton(); return clickToggleTestReportButton();
}) })
.then(() => { .then(() => {
// Report is visible when button is clicked. // Report is visible when button is clicked.
assertFalse(getResultList().hidden); assertTrue(isIronCollapseOpen());
assertFalse(getToggleTestReportButton().hidden); assertTrue(isVisible(getToggleTestReportButton()));
assertFalse(getLearnMoreButton().hidden);
return clickToggleTestReportButton(); return clickToggleTestReportButton();
}) })
.then(() => { .then(() => {
// Report is hidden when button is clicked again. // Report is hidden when button is clicked again.
assertTrue(getResultList().hidden); assertFalse(isIronCollapseOpen());
assertTrue(getLearnMoreButton().hidden); assertTrue(isVisible(getToggleTestReportButton()));
assertFalse(getToggleTestReportButton().hidden);
}); });
}); });
...@@ -233,18 +233,17 @@ export function routineSectionTestSuite() { ...@@ -233,18 +233,17 @@ export function routineSectionTestSuite() {
chromeos.diagnostics.mojom.RoutineType.kBatteryCharge, chromeos.diagnostics.mojom.RoutineType.kBatteryCharge,
]; ];
// TODO(joonbug): Use visibility assert over testing .hidden attr.
return initializeRoutineSection(routines) return initializeRoutineSection(routines)
.then(() => { .then(() => {
// Hidden by default. // Hidden by default.
assertTrue(getResultList().hidden); assertFalse(isIronCollapseOpen());
assertTrue(getToggleTestReportButton().hidden); assertFalse(isVisible(getToggleTestReportButton()));
return clickRunTestsButton(); return clickRunTestsButton();
}) })
.then(() => { .then(() => {
// Report is hidden by default and so is toggle button. // Report is hidden by default and so is toggle button.
assertTrue(getResultList().hidden); assertFalse(isIronCollapseOpen());
assertTrue(getToggleTestReportButton().hidden); assertFalse(isVisible(getToggleTestReportButton()));
}); });
}); });
...@@ -365,15 +364,16 @@ export function routineSectionTestSuite() { ...@@ -365,15 +364,16 @@ export function routineSectionTestSuite() {
return initializeRoutineSection(routines) return initializeRoutineSection(routines)
.then(() => { .then(() => {
// Hidden by default. // Hidden by default.
assertTrue(getStatusBadge().hidden); assertFalse(isVisible(getStatusBadge()));
assertTrue(getStatusTextElement().hidden); assertFalse(isVisible(getStatusTextElement()));
return clickRunTestsButton(); return clickRunTestsButton();
}) })
.then(() => { .then(() => {
// Badge is visible with test running. // Badge is visible with test running.
assertFalse(getStatusBadge().hidden); assertFalse(getStatusBadge().hidden);
assertEquals(getStatusBadge().badgeType, BadgeType.DEFAULT); assertEquals(getStatusBadge().badgeType, BadgeType.RUNNING);
assertEquals(getStatusBadge().value, 'Test running'); dx_utils.assertTextContains(
getStatusBadge().value, loadTimeData.getString('testRunning'));
// Text is visible describing which test is being run. // Text is visible describing which test is being run.
assertFalse(getStatusTextElement().hidden); assertFalse(getStatusTextElement().hidden);
...@@ -424,8 +424,9 @@ export function routineSectionTestSuite() { ...@@ -424,8 +424,9 @@ export function routineSectionTestSuite() {
.then(() => { .then(() => {
// Badge is visible with test running. // Badge is visible with test running.
assertFalse(getStatusBadge().hidden); assertFalse(getStatusBadge().hidden);
assertEquals(getStatusBadge().badgeType, BadgeType.DEFAULT); assertEquals(getStatusBadge().badgeType, BadgeType.RUNNING);
assertEquals(getStatusBadge().value, 'Test running'); dx_utils.assertTextContains(
getStatusBadge().value, loadTimeData.getString('testRunning'));
// Text is visible describing which test is being run. // Text is visible describing which test is being run.
assertFalse(getStatusTextElement().hidden); assertFalse(getStatusTextElement().hidden);
...@@ -443,8 +444,9 @@ export function routineSectionTestSuite() { ...@@ -443,8 +444,9 @@ export function routineSectionTestSuite() {
// Badge is still visible with "test running", even though first one // Badge is still visible with "test running", even though first one
// failed. // failed.
assertFalse(getStatusBadge().hidden); assertFalse(getStatusBadge().hidden);
assertEquals(getStatusBadge().badgeType, BadgeType.DEFAULT); assertEquals(getStatusBadge().badgeType, BadgeType.RUNNING);
assertEquals(getStatusBadge().value, 'Test running'); dx_utils.assertTextContains(
getStatusBadge().value, loadTimeData.getString('testRunning'));
// Text is visible describing which test is being run. // Text is visible describing which test is being run.
assertFalse(getStatusTextElement().hidden); assertFalse(getStatusTextElement().hidden);
......
...@@ -9,6 +9,8 @@ import {BadgeType} from 'chrome://diagnostics/text_badge.js'; ...@@ -9,6 +9,8 @@ import {BadgeType} from 'chrome://diagnostics/text_badge.js';
import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js'; import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
import {flushTasks} from '../../test_util.m.js'; import {flushTasks} from '../../test_util.m.js';
import * as dx_utils from './diagnostics_test_utils.js';
export function textBadgeTestSuite() { export function textBadgeTestSuite() {
/** @type {?TextBadgeElement} */ /** @type {?TextBadgeElement} */
let textBadgeElement = null; let textBadgeElement = null;
...@@ -27,9 +29,8 @@ export function textBadgeTestSuite() { ...@@ -27,9 +29,8 @@ export function textBadgeTestSuite() {
/** /**
* @param {!BadgeType} badgeType * @param {!BadgeType} badgeType
* @param {string} value * @param {string} value
* @param {boolean=} hidden
*/ */
function initializeBadge(badgeType, value, hidden = false) { function initializeBadge(badgeType, value) {
assertFalse(!!textBadgeElement); assertFalse(!!textBadgeElement);
textBadgeElement = textBadgeElement =
...@@ -37,29 +38,18 @@ export function textBadgeTestSuite() { ...@@ -37,29 +38,18 @@ export function textBadgeTestSuite() {
assertTrue(!!textBadgeElement); assertTrue(!!textBadgeElement);
textBadgeElement.badgeType = badgeType; textBadgeElement.badgeType = badgeType;
textBadgeElement.value = value; textBadgeElement.value = value;
textBadgeElement.hidden = hidden || false;
document.body.appendChild(textBadgeElement); document.body.appendChild(textBadgeElement);
return flushTasks(); return flushTasks();
} }
test('InitializeBadge', () => { test('InitializeBadge', () => {
const badgeType = BadgeType.DEFAULT; const badgeType = BadgeType.QUEUED;
const value = 'Test value'; const value = 'Test value';
return initializeBadge(badgeType, value).then(() => { return initializeBadge(badgeType, value).then(() => {
const textBadge = textBadgeElement.$$('#textBadge'); const textBadge = textBadgeElement.$$('#textBadge');
assertEquals(badgeType, textBadge.getAttribute('class')); assertEquals(badgeType, textBadge.getAttribute('class'));
assertEquals(value, textBadge.textContent.trim()); dx_utils.assertTextContains(textBadge.textContent, value);
assertFalse(textBadge.hidden);
});
});
test('InitializeBadgeHidden', () => {
const badgeType = BadgeType.DEFAULT;
const value = 'Test value';
const hidden = true;
return initializeBadge(badgeType, value, hidden).then(() => {
assertTrue(textBadgeElement.$$('#textBadge').hidden);
}); });
}); });
} }
...@@ -681,7 +681,7 @@ Try tapping the mic to ask me anything. ...@@ -681,7 +681,7 @@ Try tapping the mic to ask me anything.
<ph name="TEMPERATURE_C">$1<ex>25</ex></ph>° C <ph name="TEMPERATURE_C">$1<ex>25</ex></ph>° C
</message> </message>
<message name="IDS_DIANOSTICS_LEARN_MORE_LABEL" desc="The label for the button that links to a help support article to learn more about the test routines being run."> <message name="IDS_DIANOSTICS_LEARN_MORE_LABEL" desc="The label for the button that links to a help support article to learn more about the test routines being run.">
Learn more in the Help Center Learn more in Help Center
</message> </message>
<message name="IDS_DIAGNOSTICS_LEARN_MORE_LABEL_SHORT" desc="The label for the text link that leads to a help support article to learn more about the test routines being run."> <message name="IDS_DIAGNOSTICS_LEARN_MORE_LABEL_SHORT" desc="The label for the text link that leads to a help support article to learn more about the test routines being run.">
Learn more Learn more
...@@ -746,6 +746,9 @@ Try tapping the mic to ask me anything. ...@@ -746,6 +746,9 @@ Try tapping the mic to ask me anything.
<message name="IDS_DIAGNOSTICS_TEST_SUCCESS_BADGE_TEXT" desc="The text displayed to indicate that a test passed."> <message name="IDS_DIAGNOSTICS_TEST_SUCCESS_BADGE_TEXT" desc="The text displayed to indicate that a test passed.">
SUCCESS SUCCESS
</message> </message>
<message name="IDS_DIAGNOSTICS_TEST_QUEUED_BADGE_TEXT" desc="The text displayed to indicate that a test is currently queued.">
QUEUED
</message>
<message name="IDS_DIAGNOSTICS_TEST_RUNNING_TEXT" desc="The text displayed while a test is running."> <message name="IDS_DIAGNOSTICS_TEST_RUNNING_TEXT" desc="The text displayed while a test is running.">
Test running Test running
</message> </message>
......
d96a5f3d329ed440bd46454f60530a8c4da01611
\ No newline at end of file
99d733189f12c848ba779e277aa6ea9f7c9557b7 d96a5f3d329ed440bd46454f60530a8c4da01611
\ No newline at end of file \ No newline at end of file
...@@ -89,6 +89,7 @@ void AddDiagnosticsStrings(content::WebUIDataSource* html_source) { ...@@ -89,6 +89,7 @@ void AddDiagnosticsStrings(content::WebUIDataSource* html_source) {
{"stopTestButtonText", IDS_DIAGNOSTICS_STOP_TEST_BUTTON_TEXT}, {"stopTestButtonText", IDS_DIAGNOSTICS_STOP_TEST_BUTTON_TEXT},
{"testFailure", IDS_DIAGNOSTICS_TEST_FAILURE_TEXT}, {"testFailure", IDS_DIAGNOSTICS_TEST_FAILURE_TEXT},
{"testFailedBadgeText", IDS_DIAGNOSTICS_TEST_FAILURE_BADGE_TEXT}, {"testFailedBadgeText", IDS_DIAGNOSTICS_TEST_FAILURE_BADGE_TEXT},
{"testQueuedBadgeText", IDS_DIAGNOSTICS_TEST_QUEUED_BADGE_TEXT},
{"testRunning", IDS_DIAGNOSTICS_TEST_RUNNING_TEXT}, {"testRunning", IDS_DIAGNOSTICS_TEST_RUNNING_TEXT},
{"testRunningBadgeText", IDS_DIAGNOSTICS_TEST_RUNNING_BADGE_TEXT}, {"testRunningBadgeText", IDS_DIAGNOSTICS_TEST_RUNNING_BADGE_TEXT},
{"testSuccess", IDS_DIAGNOSTICS_TEST_SUCCESS_TEXT}, {"testSuccess", IDS_DIAGNOSTICS_TEST_SUCCESS_TEXT},
......
...@@ -47,9 +47,9 @@ ...@@ -47,9 +47,9 @@
} }
.spacing { .spacing {
margin: 14px 0px; margin-bottom: 16px;
padding-inline-end: 15px; margin-top: 12px;
padding-inline-start: 15px; padding-inline: 20px;
} }
.top-section { .top-section {
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
--diagnostics-header-font-family: Roboto, sans-serif; --diagnostics-header-font-family: Roboto, sans-serif;
--diagnostics-data-point-font-family: Roboto, sans-serif; --diagnostics-data-point-font-family: Roboto, sans-serif;
--diagnostics-overview-font-family: Roboto, sans-serif; --diagnostics-overview-font-family: Roboto, sans-serif;
--diagnostics-text-badge-font-family: Roboto, sans-serif;
--diagnostics-routine-name-font-family: Roboto, sans-serif;
--diagnostics-default-font-size: 14px; --diagnostics-default-font-size: 14px;
--diagnostics-header-font-size: 22px; --diagnostics-header-font-size: 22px;
...@@ -14,6 +16,8 @@ ...@@ -14,6 +16,8 @@
--diagnostics-chart-label-font-size: 15px; --diagnostics-chart-label-font-size: 15px;
--diagnostics-chart-tick-font-size: 12px; --diagnostics-chart-tick-font-size: 12px;
--diagnostics-chart-legend-font-size: 12px; --diagnostics-chart-legend-font-size: 12px;
--diagnostics-text-badge-font-size: 11px;
--diagnostics-routine-name-font-size: 13px;
--diagnostics-default-font-weight: 500; --diagnostics-default-font-weight: 500;
--diagnostics-header-font-weight: 600; --diagnostics-header-font-weight: 600;
...@@ -26,6 +30,7 @@ ...@@ -26,6 +30,7 @@
--diagnostics-overview-text-color: var(--google-grey-900); --diagnostics-overview-text-color: var(--google-grey-900);
--diagnostics-data-point-title-color: var(--google-grey-900); --diagnostics-data-point-title-color: var(--google-grey-900);
--diagnostics-data-point-subtitle-color: var(--google-grey-700); --diagnostics-data-point-subtitle-color: var(--google-grey-700);
--diagnostics-routine-name-color: var(--google-grey-900);
--diagnostics-default-font: { --diagnostics-default-font: {
font-family: var(--diagnostics-default-font-family); font-family: var(--diagnostics-default-font-family);
...@@ -69,6 +74,14 @@ ...@@ -69,6 +74,14 @@
font-family: var(--diagnostics-header-font-family); font-family: var(--diagnostics-header-font-family);
font-size: var(--diagnostics-chart-legend-font-size); font-size: var(--diagnostics-chart-legend-font-size);
}; };
--diagnostics-text-badge-font: {
font-family: var(--diagnostics-text-badge-font-family);
font-size: var(--diagnostics-text-badge-font-size);
};
--diagnostics-routine-name-font: {
font-family: var(--diagnostics-routine-name-font-family);
font-size: var(--diagnostics-routine-name-font-size);
};
} }
</style> </style>
</template> </template>
\ No newline at end of file
<style include="diagnostics-shared"> <style include="diagnostics-shared">
.entryRow { .entryRow {
display: flex; align-items: center;
flex-direction: row; column-gap: 15px;
justify-content: space-between; display: grid;
grid-template-columns: auto 1fr;
height: 40px;
}
#routine {
@apply --diagnostics-routine-name-font;
color: var(--diagnostics-routine-name-color);
} }
</style> </style>
<div class="entryRow"> <div class="entryRow">
<div id="routine">[[routineType_]]</div> <text-badge id="status" badge-type="[[badgeType_]]" value="[[badgeText_]]">
<text-badge id="status" badge-type="[[getBadgeType_(item.progress, item.result)]]"
value="[[getBadgeText_(item.progress, item.result)]]"
hidden="[[!isTestStarted_(item.progress)]]">
</text-badge> </text-badge>
<div id="routine">[[routineType_]]</div>
</div> </div>
...@@ -86,8 +86,22 @@ Polymer({ ...@@ -86,8 +86,22 @@ Polymer({
type: String, type: String,
computed: 'getRunningRoutineString_(item.routine)', computed: 'getRunningRoutineString_(item.routine)',
}, },
/** @private {!BadgeType} */
badgeType_: {
type: String,
value: BadgeType.QUEUED,
},
/** @private {string} */
badgeText_: {
type: String,
value: '',
},
}, },
observers: ['entryStatusChanged_(item.progress, item.result)'],
/** /**
* Get the localized string name for the routine. * Get the localized string name for the routine.
* @param {!RoutineType} routine * @param {!RoutineType} routine
...@@ -98,44 +112,40 @@ Polymer({ ...@@ -98,44 +112,40 @@ Polymer({
}, },
/** /**
* @protected * @private
*/ */
getBadgeText_() { entryStatusChanged_() {
if (this.item.progress === ExecutionProgress.kRunning) { // TODO(michaelcheco): Display "STOPPED" state when routines are cancelled.
return loadTimeData.getString('testRunningBadgeText'); switch (this.item.progress) {
} case ExecutionProgress.kNotStarted:
this.setBadgeTypeAndText_(
if (this.item.result && BadgeType.QUEUED, loadTimeData.getString('testQueuedBadgeText'));
getSimpleResult(this.item.result) === break;
chromeos.diagnostics.mojom.StandardRoutineResult.kTestPassed) { case ExecutionProgress.kRunning:
return loadTimeData.getString('testSucceededBadgeText'); this.setBadgeTypeAndText_(
} BadgeType.RUNNING, loadTimeData.getString('testRunningBadgeText'));
break;
return loadTimeData.getString('testFailedBadgeText'); case ExecutionProgress.kCompleted:
}, const testPassed = this.item.result &&
getSimpleResult(this.item.result) ===
/** chromeos.diagnostics.mojom.StandardRoutineResult.kTestPassed;
* @protected const badgeType = testPassed ? BadgeType.SUCCESS : BadgeType.ERROR;
*/ const badgeText = loadTimeData.getString(
getBadgeType_() { testPassed ? 'testSucceededBadgeText' : 'testFailedBadgeText');
if (this.item.progress === ExecutionProgress.kRunning) { this.setBadgeTypeAndText_(badgeType, badgeText);
return BadgeType.DEFAULT; break;
} default:
assertNotReached();
if (this.item.result &&
getSimpleResult(this.item.result) ===
chromeos.diagnostics.mojom.StandardRoutineResult.kTestPassed) {
return BadgeType.SUCCESS;
} }
return BadgeType.ERROR;
}, },
/** /**
* @protected * @param {!BadgeType} badgeType
* @return {boolean} * @param {string} badgeText
* @private
*/ */
isTestStarted_() { setBadgeTypeAndText_(badgeType, badgeText) {
return this.item.progress !== ExecutionProgress.kNotStarted; this.setProperties({badgeType_: badgeType, badgeText_: badgeText});
}, },
/** @override */ /** @override */
......
<style include="diagnostics-shared"> <style include="diagnostics-shared">
#resultListContainer { #resultListContainer {
background-color: var(--google-grey-100); background-color: rgba(var(--google-grey-200-rgb), .38);
border-radius: 20px; border-radius: 20px;
padding: 15px; padding: 15px;
} }
......
<style include="diagnostics-shared"> <style include="diagnostics-shared">
.learn-more-button { .learn-more-button {
background-color: rgba(var(--google-blue-600), .06); background-color: rgba(var(--google-blue-600), .06);
border-radius: 5x; border-radius: 5px;
height: 40px; height: 40px;
padding: 5px 10px; margin-top: 12px;
padding: 6px 8px;
} }
#learnMoreText { #learnMoreText {
color: var(--google-blue-600); color: var(--google-blue-600);
cursor: pointer; cursor: pointer;
} }
.result-list {
border-radius: 8px;
margin: 8px 0;
}
.routine-container {
display: flex;
justify-content: space-between;
}
.routine-section-container {
display: flex;
flex-direction: column;
}
.routine-status-container {
display: flex;
flex-direction: column;
}
#testStatusBadge {
margin-bottom: 4px;
}
#testStatusText {
@apply --diagnostics-routine-name-font;
color: var(--google-grey-700);
}
#toggleReportButton {
margin-right: 8px;
}
</style> </style>
<div id="routineSection"> <div class="routine-section-container">
<cr-button id="runTestsButton" class="action-button" on-click="onRunTestsClicked_" <div id="routineSection" class="routine-container">
disabled="[[isTestRunning]]"> <div class="routine-status-container">
[[runTestsButtonText]] <text-badge id="testStatusBadge"
</cr-button> badge-type="[[getBadgeType_(executionStatus_)]]"
<cr-button id="toggleReportButton" class="action-button" on-click="onToggleReportClicked_" hidden="[[isStatusHidden_(executionStatus_)]]"
hidden="[[isResultButtonHidden_(executionStatus_)]]"> value="[[getBadgeText_(executionStatus_)]]">
[[getReportToggleButtonText_(isReportListHidden_)]] </text-badge>
</cr-button> <span id="testStatusText"
<text-badge id="testStatusBadge" badge-type="[[getBadgeType_(executionStatus_)]]" hidden$="[[isStatusHidden_(executionStatus_)]]">
hidden="[[isStatusHidden_(executionStatus_)]]" [[getTextStatus_(executionStatus_, currentTestName_)]]
value="[[getBadgeText_(executionStatus_)]]"> </span>
</text-badge> <span id="learnMoreText"
<span id="testStatusText" hidden$="[[isStatusHidden_(executionStatus_)]]"> hidden$="[[isLearnMoreHidden_(executionStatus_)]]"
[[getTextStatus_(executionStatus_, currentTestName_)]] on-click="onLearnMoreClicked_">
</span> [[i18n('learnMoreShort')]]
<span id="learnMoreText" hidden$="[[isLearnMoreHidden_(executionStatus_)]]" </span>
on-click="onLearnMoreClicked_"> </div>
[[i18n('learnMoreShort')]] <div>
</span> <cr-button id="toggleReportButton" on-click="onToggleReportClicked_"
<routine-result-list id="resultList" hidden="[[isReportListHidden_]]"></routine-result-list> hidden="[[isResultButtonHidden_(executionStatus_)]]">
<cr-button id="learnMoreButton" class="learn-more-button" on-click="onLearnMoreClicked_" [[getReportToggleButtonText_(opened)]]
hidden="[[isReportListHidden_]]"> </cr-button>
[[i18n('learnMore')]] <cr-button id="runTestsButton" on-click="onRunTestsClicked_"
</cr-button> disabled="[[isTestRunning]]">
[[runTestsButtonText]]
</cr-button>
</div>
</div>
<iron-collapse id="collapse" opened="{{opened}}">
<div class="result-list">
<routine-result-list id="resultList"></routine-result-list>
</div>
<cr-button id="learnMoreButton" class="learn-more-button"
on-click="onLearnMoreClicked_">
[[i18n('learnMore')]]
</cr-button>
</iron-collapse>
</div> </div>
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
// 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.
import 'chrome://resources/polymer/v3_0/iron-collapse/iron-collapse.js';
import './diagnostics_card.js'; import './diagnostics_card.js';
import './diagnostics_shared_css.js'; import './diagnostics_shared_css.js';
import './routine_result_list.js'; import './routine_result_list.js';
...@@ -79,12 +80,6 @@ Polymer({ ...@@ -79,12 +80,6 @@ Polymer({
notify: true, notify: true,
}, },
/** @private {boolean} */
isReportListHidden_: {
type: Boolean,
value: true,
},
/** @type {boolean} */ /** @type {boolean} */
isPowerRoutine: { isPowerRoutine: {
type: Boolean, type: Boolean,
...@@ -166,7 +161,7 @@ Polymer({ ...@@ -166,7 +161,7 @@ Polymer({
/** @private */ /** @private */
onToggleReportClicked_() { onToggleReportClicked_() {
// Toggle report list visibility // Toggle report list visibility
this.isReportListHidden_ = !this.isReportListHidden_; this.$.collapse.toggle();
}, },
/** @private */ /** @private */
...@@ -192,10 +187,13 @@ Polymer({ ...@@ -192,10 +187,13 @@ Polymer({
return this.executionStatus_ === ExecutionProgress.kNotStarted; return this.executionStatus_ === ExecutionProgress.kNotStarted;
}, },
/** @protected */ /**
getReportToggleButtonText_() { * @param {boolean} opened Whether the section is expanded or not.
return loadTimeData.getString( * @return {string} button text.
this.isReportListHidden_ ? 'seeReportText' : 'hideReportText'); * @protected
*/
getReportToggleButtonText_(opened) {
return loadTimeData.getString(opened ? 'hideReportText' : 'seeReportText');
}, },
/** @protected */ /** @protected */
...@@ -206,7 +204,7 @@ Polymer({ ...@@ -206,7 +204,7 @@ Polymer({
} }
return BadgeType.SUCCESS; return BadgeType.SUCCESS;
} }
return BadgeType.DEFAULT; return BadgeType.RUNNING;
}, },
/** @protected */ /** @protected */
......
<style include="diagnostics-shared"> <style include="diagnostics-shared">
#textBadge { .error {
padding: 3px 5px; background-color: var(--google-red-50);
border-radius: 3px; color: var(--google-red-600);
margin-right: 14px;
}
.queued {
background-color: var(--google-grey-200);
color: var(--google-grey-600);
margin-right: 7px;
} }
.default { .running {
background-color: var(--google-blue-100); background-color: var(--google-blue-50);
color: var(--google-blue-500); color: var(--google-blue-600);
} }
.success { .success {
background-color: var(--google-green-100); background-color: var(--google-green-50);
color: var(--google-green-500); color: var(--google-green-600);
} }
.error { #textBadge {
background-color: var(--google-red-100); @apply --diagnostics-text-badge-font;
color: var(--google-red-500); border-radius: 4px;
height: 20px;
padding: 2px 6px;
text-transform: uppercase;
} }
</style> </style>
......
...@@ -12,8 +12,9 @@ import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bun ...@@ -12,8 +12,9 @@ import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bun
* @enum {string} * @enum {string}
*/ */
export const BadgeType = { export const BadgeType = {
DEFAULT: 'default',
ERROR: 'error', ERROR: 'error',
QUEUED: 'queued',
RUNNING: 'running',
SUCCESS: 'success', SUCCESS: 'success',
}; };
...@@ -30,7 +31,7 @@ Polymer({ ...@@ -30,7 +31,7 @@ Polymer({
/** @type {!BadgeType} */ /** @type {!BadgeType} */
badgeType: { badgeType: {
type: String, type: String,
value: BadgeType.DEFAULT, value: BadgeType.QUEUED,
}, },
/** @type {string} */ /** @type {string} */
......
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