forked from qt-creator/qt-creator
QmlDesigner::Model - changes in id generator
Add undescore if given string starts with a digit, e.g. (_123). Generate consecutive id if string belongs to reserved QML keywords, e.g. (text1). Task-number: QDS-13039 Change-Id: I0d5782ae666ea6060a4f765ded58624a08b3255f Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -59,19 +59,27 @@ void capitalizeFirstLetter(QString &str)
|
|||||||
str.front() = str.front().toUpper();
|
str.front() = str.front().toUpper();
|
||||||
}
|
}
|
||||||
|
|
||||||
void prependUnderscoreIfBanned(QString &id)
|
void prependUnderscoreIfDigit(QString &id)
|
||||||
{
|
{
|
||||||
if (id.size() && (id.front().isDigit() || ModelUtils::isBannedQmlId(id)))
|
if (id.size() && id.front().isDigit())
|
||||||
id.prepend(u'_');
|
id.prepend(u'_');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void appendDigitIfBannedQmlId(QString &id)
|
||||||
|
{
|
||||||
|
if (ModelUtils::isBannedQmlId(id))
|
||||||
|
id.append(u'1');
|
||||||
|
}
|
||||||
|
|
||||||
QString toValidId(QStringView id)
|
QString toValidId(QStringView id)
|
||||||
{
|
{
|
||||||
QString validId = filterInvalidLettersAndCapitalizeAfterInvalidLetter(id);
|
QString validId = filterInvalidLettersAndCapitalizeAfterInvalidLetter(id);
|
||||||
|
|
||||||
lowerFirstLetter(validId);
|
lowerFirstLetter(validId);
|
||||||
|
|
||||||
prependUnderscoreIfBanned(validId);
|
prependUnderscoreIfDigit(validId);
|
||||||
|
|
||||||
|
appendDigitIfBannedQmlId(validId);
|
||||||
|
|
||||||
return validId;
|
return validId;
|
||||||
}
|
}
|
||||||
|
@@ -61,14 +61,25 @@ TEST(UniqueName, generateId_properly_handles_dot_separated_words)
|
|||||||
ASSERT_THAT(uniqueId, "fooBarFoo");
|
ASSERT_THAT(uniqueId, "fooBarFoo");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(UniqueName, generateId_prefixes_with_underscore_if_id_is_a_reserved_word)
|
TEST(UniqueName, generateId_appends_digit_if_id_is_a_reserved_word)
|
||||||
{
|
{
|
||||||
auto pred = [&](const QString &) -> bool { return false; };
|
auto pred = [&](const QString &) -> bool { return false; };
|
||||||
QString id = "for";
|
QString id = "for";
|
||||||
|
|
||||||
QString uniqueId = UniqueName::generateId(id, pred);
|
QString uniqueId = UniqueName::generateId(id, pred);
|
||||||
|
|
||||||
ASSERT_THAT(uniqueId, "_for");
|
ASSERT_THAT(uniqueId, "for1");
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(UniqueName, generateId_generates_unique_id_if_id_is_a_reserved_word)
|
||||||
|
{
|
||||||
|
QStringList reservedIds{"for1", "for2"};
|
||||||
|
auto pred = [&](const QString &newId) -> bool { return reservedIds.contains(newId); };
|
||||||
|
QString id = "for";
|
||||||
|
|
||||||
|
QString uniqueId = UniqueName::generateId(id, pred);
|
||||||
|
|
||||||
|
ASSERT_THAT(uniqueId, "for3");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(UniqueName, generateId_prefixes_with_underscore_if_id_is_a_number)
|
TEST(UniqueName, generateId_prefixes_with_underscore_if_id_is_a_number)
|
||||||
|
Reference in New Issue
Block a user