blob: 87b17c146d453e02a303df2a9242234e4a8e4c69 [file] [log] [blame]
class CustomConfigurationTestGroupForm extends TestGroupForm {
constructor()
{
super('custom-configuration-test-group-form');
this._hasTask = false;
this._updateTestGroupNameLazily = new LazilyEvaluatedFunction(this._updateTestGroupName.bind(this));
}
setHasTask(hasTask)
{
this._hasTask = hasTask;
this.enqueueToRender();
}
hasCommitSets()
{
return !!this.part('configurator').commitSets();
}
setConfigurations(test, platform, repetitionCount, commitSets)
{
const configurator = this.part('configurator');
configurator.selectTests([test]);
configurator.selectPlatform(platform);
if (commitSets.length == 2)
configurator.setCommitSets(commitSets[0], commitSets[1]);
this.setRepetitionCount(repetitionCount);
this.enqueueToRender();
}
startTesting()
{
const taskName = this.content('task-name').value;
const testGroupName = this.content('group-name').value;
const configurator = this.part('configurator');
const commitSets = configurator.commitSets();
const platform = configurator.platform();
const test = configurator.tests()[0]; // FIXME: Add the support for specifying multiple tests.
console.assert(!!this._hasTask === !taskName);
if (!this._hasTask)
this.dispatchAction('startTesting', this._repetitionCount, testGroupName, commitSets, platform, test, taskName, this._notifyOnCompletion);
else
this.dispatchAction('startTesting', this._repetitionCount, testGroupName, commitSets, platform, test, this._notifyOnCompletion);
}
didConstructShadowTree()
{
super.didConstructShadowTree();
this.part('configurator').listenToAction('testConfigChange', () => this.enqueueToRender());
this.content('task-name').oninput = () => this.enqueueToRender();
this.content('group-name').oninput = () => this.enqueueToRender();
}
render()
{
super.render();
const configurator = this.part('configurator');
this._updateTestGroupNameLazily.evaluate(configurator.tests(), configurator.platform());
const needsTaskName = !this._hasTask && !this.content('task-name').value;
this.content('iteration-start-pane').style.display = !!configurator.commitSets() ? null : 'none';
this.content('task-name').style.display = this._hasTask ? 'none' : null;
this.content('start-button').disabled = needsTaskName || !this.content('group-name').value;
}
_updateTestGroupName(tests, platform)
{
if (!platform || !tests.length)
return;
this.content('group-name').value = `${tests.map((test) => test.name()).join(', ')} on ${platform.name()}`;
}
static cssTemplate()
{
return super.cssTemplate() + `
input {
width: 30%;
min-width: 10rem;
font-size: 1rem;
font-weight: inherit;
}
#form > * {
margin-bottom: 1rem;
}
#start-button {
display: block;
margin-top: 0.5rem;
font-size: 1.2rem;
font-weight: inherit;
}
`;
}
static htmlTemplate()
{
return `<form id="form">
<input id="task-name" type="text" placeholder="Name this task">
<custom-analysis-task-configurator id="configurator"></custom-analysis-task-configurator>
<div id="iteration-start-pane">
<input id="group-name" type="text" placeholder="Test group name">
${super.formContent()}
<button id="start-button">Start</button>
</div>
</form>`;
}
}
ComponentBase.defineElement('custom-configuration-test-group-form', CustomConfigurationTestGroupForm);