mirror of
https://github.com/aseprite/aseprite.git
synced 2025-04-02 13:20:12 +00:00
251 lines
6.9 KiB
C++
251 lines
6.9 KiB
C++
// Aseprite CSS Library
|
|
// Copyright (C) 2013 David Capello
|
|
//
|
|
// This source file is distributed under MIT license,
|
|
// please read LICENSE.txt for more information.
|
|
|
|
#include <gtest/gtest.h>
|
|
|
|
#include "css/css.h"
|
|
|
|
using namespace css;
|
|
using namespace std;
|
|
|
|
ostream& operator<<(ostream& os, const Value& value)
|
|
{
|
|
os << "(" << value.type();
|
|
|
|
if (value.type() == Value::Number)
|
|
os << ", " << value.number() << " [" << value.unit() << "]";
|
|
else if (value.type() == Value::String)
|
|
os << ", " << value.string();
|
|
|
|
os << ")";
|
|
return os;
|
|
}
|
|
|
|
TEST(Css, Style)
|
|
{
|
|
Rule background("background");
|
|
Rule text("text");
|
|
Rule border("border");
|
|
Style style("style");
|
|
|
|
style[background] = Value("image.png");
|
|
style[text] = Value("hi");
|
|
style[border] = Value(12.0, "px");
|
|
EXPECT_EQ(Value("image.png"), style[background]);
|
|
EXPECT_EQ(Value("hi"), style[text]);
|
|
EXPECT_EQ(Value(12.0, "px"), style[border]);
|
|
|
|
style[border].setNumber(13.0);
|
|
EXPECT_EQ(Value(13.0, "px"), style[border]);
|
|
|
|
Style style2("style2", &style);
|
|
EXPECT_EQ(&style, style2.base());
|
|
EXPECT_EQ(Value(), style2[background]);
|
|
EXPECT_EQ(Value(), style2[text]);
|
|
EXPECT_EQ(Value(), style2[border]);
|
|
}
|
|
|
|
TEST(Css, QueryIsInSyncWithStyleSheet)
|
|
{
|
|
Rule background("background");
|
|
Sheet sheet;
|
|
sheet.addRule(&background);
|
|
|
|
Style style("style");
|
|
style[background] = Value("a.png");
|
|
sheet.addStyle(&style);
|
|
|
|
Query query = sheet.query(style);
|
|
EXPECT_EQ(Value("a.png"), query[background]);
|
|
|
|
style[background] = Value("b.png");
|
|
EXPECT_EQ(Value("b.png"), query[background]);
|
|
}
|
|
|
|
TEST(Css, StatefulStyles)
|
|
{
|
|
Rule background("background");
|
|
Rule text("text");
|
|
Rule border("border");
|
|
State hover("hover");
|
|
State focus("focus");
|
|
State active("active");
|
|
Style base("base");
|
|
Style baseHover("base:hover");
|
|
Style baseFocus("base:focus");
|
|
Style baseActive("base:active");
|
|
base[background] = Value("image.png");
|
|
base[text] = Value("textnormal");
|
|
baseHover[text] = Value("texthover");
|
|
baseFocus[border] = Value(12.0);
|
|
baseActive[border] = Value(24.0);
|
|
|
|
Sheet sheet;
|
|
sheet.addRule(&background);
|
|
sheet.addRule(&text);
|
|
sheet.addRule(&border);
|
|
sheet.addStyle(&base);
|
|
sheet.addStyle(&baseHover);
|
|
sheet.addStyle(&baseFocus);
|
|
sheet.addStyle(&baseActive);
|
|
|
|
Query query = sheet.query(base);
|
|
EXPECT_EQ(Value("image.png"), query[background]);
|
|
EXPECT_EQ(Value("textnormal"), query[text]);
|
|
|
|
query = sheet.query(base + hover);
|
|
EXPECT_EQ(Value("image.png"), query[background]);
|
|
EXPECT_EQ(Value("texthover"), query[text]);
|
|
|
|
query = sheet.query(base + focus);
|
|
EXPECT_EQ(Value("image.png"), query[background]);
|
|
EXPECT_EQ(Value("textnormal"), query[text]);
|
|
EXPECT_EQ(Value(12.0), query[border]);
|
|
|
|
query = sheet.query(base + focus + hover);
|
|
EXPECT_EQ(Value("image.png"), query[background]);
|
|
EXPECT_EQ(Value("texthover"), query[text]);
|
|
EXPECT_EQ(Value(12.0), query[border]);
|
|
|
|
query = sheet.query(base + focus + hover + active);
|
|
EXPECT_EQ(Value("image.png"), query[background]);
|
|
EXPECT_EQ(Value("texthover"), query[text]);
|
|
EXPECT_EQ(Value(24.0), query[border]);
|
|
|
|
query = sheet.query(base + active + focus + hover); // Different order
|
|
EXPECT_EQ(Value("image.png"), query[background]);
|
|
EXPECT_EQ(Value("texthover"), query[text]);
|
|
EXPECT_EQ(Value(12.0), query[border]);
|
|
}
|
|
|
|
TEST(Css, StyleHierarchy)
|
|
{
|
|
Rule bg("bg");
|
|
Rule fg("fg");
|
|
State hover("hover");
|
|
State focus("focus");
|
|
Style base("base");
|
|
Style stylea("stylea", &base);
|
|
Style styleb("styleb", &stylea);
|
|
Style stylec("stylec", &styleb);
|
|
base[bg] = Value(1);
|
|
base[fg] = Value(2);
|
|
stylea[bg] = Value(3);
|
|
styleb[bg] = Value(4);
|
|
styleb[fg] = Value(5);
|
|
stylec[bg] = Value(6);
|
|
|
|
Sheet sheet;
|
|
sheet.addRule(&bg);
|
|
sheet.addRule(&fg);
|
|
sheet.addStyle(&base);
|
|
sheet.addStyle(&stylea);
|
|
sheet.addStyle(&styleb);
|
|
sheet.addStyle(&stylec);
|
|
|
|
Query query = sheet.query(base);
|
|
EXPECT_EQ(Value(1), query[bg]);
|
|
EXPECT_EQ(Value(2), query[fg]);
|
|
|
|
query = sheet.query(stylea);
|
|
EXPECT_EQ(Value(3), query[bg]);
|
|
EXPECT_EQ(Value(2), query[fg]);
|
|
|
|
query = sheet.query(styleb);
|
|
EXPECT_EQ(Value(4), query[bg]);
|
|
EXPECT_EQ(Value(5), query[fg]);
|
|
|
|
query = sheet.query(stylec);
|
|
EXPECT_EQ(Value(6), query[bg]);
|
|
EXPECT_EQ(Value(5), query[fg]);
|
|
}
|
|
|
|
TEST(Css, CompoundStyles)
|
|
{
|
|
Rule bg("bg");
|
|
Rule fg("fg");
|
|
State hover("hover");
|
|
State focus("focus");
|
|
Style base("base");
|
|
Style baseHover("base:hover");
|
|
Style baseFocus("base:focus");
|
|
Style sub("sub", &base);
|
|
Style subFocus("sub:focus", &base);
|
|
Style sub2("sub2", &sub);
|
|
Style sub3("sub3", &sub2);
|
|
Style sub3FocusHover("sub3:focus:hover", &sub2);
|
|
|
|
base[bg] = Value(1);
|
|
base[fg] = Value(2);
|
|
baseHover[fg] = Value(3);
|
|
baseFocus[bg] = Value(4);
|
|
|
|
sub[bg] = Value(5);
|
|
subFocus[fg] = Value(6);
|
|
|
|
sub3[bg] = Value(7);
|
|
sub3FocusHover[fg] = Value(8);
|
|
|
|
Sheet sheet;
|
|
sheet.addRule(&bg);
|
|
sheet.addRule(&fg);
|
|
sheet.addStyle(&base);
|
|
sheet.addStyle(&baseHover);
|
|
sheet.addStyle(&baseFocus);
|
|
sheet.addStyle(&sub);
|
|
sheet.addStyle(&subFocus);
|
|
sheet.addStyle(&sub2);
|
|
sheet.addStyle(&sub3);
|
|
sheet.addStyle(&sub3FocusHover);
|
|
|
|
CompoundStyle compoundBase = sheet.compoundStyle("base");
|
|
EXPECT_EQ(Value(1), compoundBase[bg]);
|
|
EXPECT_EQ(Value(2), compoundBase[fg]);
|
|
EXPECT_EQ(Value(1), compoundBase[hover][bg]);
|
|
EXPECT_EQ(Value(3), compoundBase[hover][fg]);
|
|
EXPECT_EQ(Value(4), compoundBase[focus][bg]);
|
|
EXPECT_EQ(Value(2), compoundBase[focus][fg]);
|
|
EXPECT_EQ(Value(4), compoundBase[hover+focus][bg]);
|
|
EXPECT_EQ(Value(3), compoundBase[hover+focus][fg]);
|
|
|
|
CompoundStyle compoundSub = sheet.compoundStyle("sub");
|
|
EXPECT_EQ(Value(5), compoundSub[bg]);
|
|
EXPECT_EQ(Value(2), compoundSub[fg]);
|
|
EXPECT_EQ(Value(5), compoundSub[hover][bg]);
|
|
EXPECT_EQ(Value(3), compoundSub[hover][fg]);
|
|
EXPECT_EQ(Value(4), compoundSub[focus][bg]);
|
|
EXPECT_EQ(Value(6), compoundSub[focus][fg]);
|
|
EXPECT_EQ(Value(4), compoundSub[hover+focus][bg]);
|
|
EXPECT_EQ(Value(6), compoundSub[hover+focus][fg]);
|
|
|
|
CompoundStyle compoundSub2 = sheet.compoundStyle("sub2");
|
|
EXPECT_EQ(Value(5), compoundSub2[bg]);
|
|
EXPECT_EQ(Value(2), compoundSub2[fg]);
|
|
EXPECT_EQ(Value(5), compoundSub2[hover][bg]);
|
|
EXPECT_EQ(Value(3), compoundSub2[hover][fg]);
|
|
EXPECT_EQ(Value(4), compoundSub2[focus][bg]);
|
|
EXPECT_EQ(Value(6), compoundSub2[focus][fg]);
|
|
EXPECT_EQ(Value(4), compoundSub2[hover+focus][bg]);
|
|
EXPECT_EQ(Value(6), compoundSub2[hover+focus][fg]);
|
|
|
|
CompoundStyle compoundSub3 = sheet.compoundStyle("sub3");
|
|
EXPECT_EQ(Value(7), compoundSub3[bg]);
|
|
EXPECT_EQ(Value(2), compoundSub3[fg]);
|
|
EXPECT_EQ(Value(7), compoundSub3[hover][bg]);
|
|
EXPECT_EQ(Value(3), compoundSub3[hover][fg]);
|
|
EXPECT_EQ(Value(4), compoundSub3[focus][bg]);
|
|
EXPECT_EQ(Value(6), compoundSub3[focus][fg]);
|
|
EXPECT_EQ(Value(4), compoundSub3[hover+focus][bg]);
|
|
EXPECT_EQ(Value(6), compoundSub3[hover+focus][fg]);
|
|
EXPECT_EQ(Value(8), compoundSub3[focus+hover][fg]);
|
|
}
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
::testing::InitGoogleTest(&argc, argv);
|
|
return RUN_ALL_TESTS();
|
|
}
|