const assert = require("assert");
Feature("Richtext regions displaying");
Scenario("Display correct colors", async ({ I, LabelStudio, AtLabels, AtRichText }) => {
I.amOnPage("/");
LabelStudio.init({
config: ``,
data: {
text: "Red. Green. Blue. Yellow.",
},
annotations: [
{
id: "test",
result: [
{
id: "Red",
from_name: "label",
to_name: "text",
type: "labels",
value: { start: 0, end: 3, labels: ["Red"] },
},
{
id: "Green",
from_name: "label",
to_name: "text",
type: "labels",
value: { start: 5, end: 10, labels: ["Green"] },
},
],
},
],
settings: {
selectAfterCreate: true,
},
});
LabelStudio.waitForObjectsReady();
{
I.pressKey("u");
const elementLocator = locate(".htx-highlight").withText("Red");
I.say("Red is red");
const color = await I.grabCssPropertyFrom(elementLocator, "background-color");
I.say(`The color of it is ${color}`);
assert(color.includes("(255, 0, 0"), "Oh no! Red is not red!");
I.say("even if it's selected");
I.click(elementLocator);
const selectedColor = await I.grabCssPropertyFrom(elementLocator, "background-color");
I.say(`The color of it is ${selectedColor}`);
assert(selectedColor.includes("(255, 0, 0"), "Oh no! Red is not red!");
}
{
I.pressKey("u");
const elementLocator = locate(".htx-highlight").withText("Green");
I.say("Green is green");
const color = await I.grabCssPropertyFrom(elementLocator, "background-color");
I.say(`The color of it is ${color}`);
assert(color.includes("(0, 255, 0"), "Oh no! Green is not green!");
I.say("even if it's selected");
I.click(elementLocator);
const selectedColor = await I.grabCssPropertyFrom(elementLocator, "background-color");
I.say(`The color of it is ${selectedColor}`);
assert(selectedColor.includes("(0, 255, 0"), "Oh no! Green is not green!");
}
{
I.pressKey("u");
I.say('Let\'s label "Blue" as `Blue`.');
AtLabels.clickLabel("Blue");
AtRichText.selectTextByGlobalOffset(12, 16);
const elementLocator = locate(".htx-highlight").withText("Blue");
I.say("Now Blue is blue");
const color = await I.grabCssPropertyFrom(elementLocator, "background-color");
I.say(`The color of it is ${color}`);
assert(color.includes("(0, 0, 255"), "Oh no! Blue is not blue!");
I.say("even if it's unselected");
I.pressKey("u");
const unselectedColor = await I.grabCssPropertyFrom(elementLocator, "background-color");
I.say(`The color of it is ${unselectedColor}`);
assert(unselectedColor.includes("(0, 0, 255"), "Oh no! Blue is not blue!");
}
{
I.pressKey("u");
I.say('Let\'s label "Yellow" as `Red`.');
AtLabels.clickLabel("Red");
AtRichText.selectTextByGlobalOffset(18, 24);
I.say("Change it to Green");
AtLabels.clickLabel("Green");
I.say("and finally to Yellow");
AtLabels.clickLabel("Yellow");
const elementLocator = locate(".htx-highlight").withText("Yellow");
I.say("It's really yellow now");
const color = await I.grabCssPropertyFrom(elementLocator, "background-color");
I.say(`The color of it is ${color}`);
assert(color.includes("(255, 255, 0"), "Oh no! Yellow is not yellow!");
I.say("even if it's unselected");
I.pressKey("u");
const unselectedColor = await I.grabCssPropertyFrom(elementLocator, "background-color");
I.say(`The color of it is ${unselectedColor}`);
assert(unselectedColor.includes("(255, 255, 0"), "Oh no! Yellow is not yellow!");
}
});
Scenario("Displaying selected and highlighted regions", async ({ I, LabelStudio, AtOutliner, AtDetails }) => {
I.amOnPage("/");
LabelStudio.init({
config: ``,
data: {
text: "Region. Blank.",
},
annotations: [
{
id: "test",
result: [
{
id: "Region",
from_name: "label",
to_name: "text",
type: "labels",
value: { start: 0, end: 6, labels: ["Region"] },
},
{
id: "Blank",
from_name: "label",
to_name: "text",
type: "labels",
value: { start: 8, end: 13, labels: [] },
},
],
},
],
});
LabelStudio.waitForObjectsReady();
AtOutliner.seeRegions(2);
{
I.say("Highlighted regions should have a different border");
const originalBorder = await I.grabCssPropertyFrom(".htx-highlight", "border");
{
I.say("The different border should appears on hovering region");
AtOutliner.hoverRegion(1);
const hoveredBorder = await I.grabCssPropertyFrom(".htx-highlight", "border");
assert.notEqual(
originalBorder,
hoveredBorder,
"The border of the region hovered in outliner tree should be different from the normal state's value",
);
}
{
I.say("Unhover the region");
I.moveCursorTo("#logo");
const unhoveredBorder = await I.grabCssPropertyFrom(".htx-highlight", "border");
assert.equal(
originalBorder,
unhoveredBorder,
"The border of the region that was unhovered should be equal to the original state's value",
);
}
{
I.say('The other way to get hovered state id using the "Create relation" tool...');
AtOutliner.clickRegion(2);
AtDetails.clickCreateRelation();
I.say("...and hover it inside the editor.");
I.moveCursorTo(".htx-highlight");
const hoveredBorder = await I.grabCssPropertyFrom(".htx-highlight", "border");
assert.notEqual(
originalBorder,
hoveredBorder,
"The border of the region hovered inside the editor tree should be different from the normal state's value",
);
}
}
I.say("Exit relation mode");
I.pressKey("Escape"); // Exit linking mode
I.say("Region should be still selected");
I.seeElement(".htx-highlight.__active");
I.pressKey("Escape"); // Unselect region
{
I.say("The background of the element should be visually different on selection");
const originalBackground = await I.grabCssPropertyFrom(".htx-highlight", "background");
AtOutliner.clickRegion(1);
const selectedBackground = await I.grabCssPropertyFrom(".htx-highlight", "background");
assert.notEqual(
originalBackground,
selectedBackground,
"The background of the element should be visually different on selection",
);
}
});
Scenario("Displaying label in the region", async ({ I, LabelStudio, AtOutliner, AtSettings }) => {
async function checkLabelVisibility(locator, content, shouldBeVisible = true) {
const text = await I.grabCssPropertyFromPseudo(locator, "content", "after");
const display = await I.grabCssPropertyFromPseudo(locator, "display", "after");
assert.strictEqual(text, content, `Label name should be "${content}" but "${text}" was seen.`);
if (shouldBeVisible) {
assert.strictEqual(display, "inline", "Label should be visible.");
} else {
assert.strictEqual(display, "none", "Label should be hidden.");
}
}
I.amOnPage("/");
LabelStudio.init({
config: ``,
data: {
text: "Region. Blank.",
},
annotations: [
{
id: "test",
result: [
{
id: "Region",
from_name: "label",
to_name: "text",
type: "labels",
value: { start: 0, end: 6, labels: ["Region"] },
},
{
id: "Blank",
from_name: "label",
to_name: "text",
type: "labels",
value: { start: 8, end: 13, labels: [] },
},
],
},
],
settings: {
showLabels: true,
},
});
LabelStudio.waitForObjectsReady();
AtOutliner.seeRegions(2);
await checkLabelVisibility(locate(".htx-highlight").at(1), '"1:Region"', true);
await checkLabelVisibility(locate(".htx-highlight").at(2), '"2"', true);
I.say("Hide labels in settings");
AtSettings.open();
AtSettings.setGeneralSettings({
[AtSettings.GENERAL_SETTINGS.SHOW_LABELS]: false,
});
AtSettings.close();
I.say("Make sure that label is hidden");
await checkLabelVisibility(locate(".htx-highlight").at(1), '"1:Region"', false);
await checkLabelVisibility(locate(".htx-highlight").at(2), '"2"', false);
});