Skip to content

Commit

Permalink
fix(#7): Добавлены проверки на дублирование значений идентификаторов у
Browse files Browse the repository at this point in the history
элементов форм
  • Loading branch information
nikolay-martynov committed Jul 27, 2022
1 parent 2518009 commit 03b8b87
Show file tree
Hide file tree
Showing 8 changed files with 505 additions and 1 deletion.
Expand Up @@ -6,6 +6,10 @@
import static com._1c.g5.v8.dt.form.model.FormPackage.Literals.FORM;
import static com._1c.g5.v8.dt.form.model.FormPackage.Literals.FORM_ITEM__ID;

import java.text.MessageFormat;
import java.util.HashSet;
import java.util.Set;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.ecore.EStructuralFeature;

Expand Down Expand Up @@ -85,6 +89,7 @@ protected void check(Object object, ResultAcceptor resultAcceptor, ICheckParamet
.forEach(attribute -> CorePlugin.trace(DEBUG_OPTION, "Got form attribute: id={0}, class={1}", //$NON-NLS-1$
attribute.getId(), attribute.getClass()));
}
Set<Integer> seenIdentifiers = new HashSet<>();
for (FormItemIterator iterator = new FormItemIterator(form); iterator.hasNext();)
{
if (progressMonitor.isCanceled())
Expand All @@ -94,7 +99,19 @@ protected void check(Object object, ResultAcceptor resultAcceptor, ICheckParamet
}
FormItem item = iterator.next();
CorePlugin.trace(DEBUG_OPTION, "Got form item: id={0}, class={1}", item.getId(), item.getClass()); //$NON-NLS-1$
if (!hasValidId(item))
if (hasValidId(item))
{
boolean isUniqueId = seenIdentifiers.add(item.getId());
if (!isUniqueId)
{
CorePlugin.trace(DEBUG_OPTION, "Form item has a duplicate identifier: id={0}, item={1}, seen={2}", //$NON-NLS-1$
item.getId(), item, seenIdentifiers);
resultAcceptor.addIssue(
MessageFormat.format(Messages.InvalidItemIdCheck_DuplicateValueOfIdAttribute, item.getId()),
item, FORM_ITEM__ID);
}
}
else
{
CorePlugin.trace(DEBUG_OPTION, "Form item has an invalid identifier: id={0}, item={1}", item.getId(), //$NON-NLS-1$
item);
Expand Down
Expand Up @@ -31,6 +31,7 @@ final class Messages
public static String NamedElementNameCheck_Form_named_element_name_is_empty;
public static String NamedElementNameCheck_title;
public static String InvalidItemIdCheck_description;
public static String InvalidItemIdCheck_DuplicateValueOfIdAttribute;
public static String InvalidItemIdCheck_InvalidValueOfIdAttribute;
public static String InvalidItemIdCheck_title;
static
Expand Down
Expand Up @@ -22,6 +22,8 @@ DataPathReferredObjectCheck_title = Form object data path referred to existing o

InvalidItemIdCheck_description = Checks that each item on a form has a correct value of identifier

InvalidItemIdCheck_DuplicateValueOfIdAttribute = Form item identifier is duplicated by another form item: {0}

InvalidItemIdCheck_InvalidValueOfIdAttribute = Invalid form item identifier

InvalidItemIdCheck_title = Form item identifier correctness
Expand Down
Expand Up @@ -23,6 +23,8 @@ DataPathReferredObjectCheck_title = Путь к данным объекта фо

InvalidItemIdCheck_description = Проверяет, что каждому элементу формы назначен идентификатор с корректным значением.

InvalidItemIdCheck_DuplicateValueOfIdAttribute = Значение идентификатора элемента формы продублировано в другом эелеиенте формы: {0}

InvalidItemIdCheck_InvalidValueOfIdAttribute = Некорректное значение идентификатора элемента формы

InvalidItemIdCheck_title = Корректность идентификатора элемента формы
Expand Down
Expand Up @@ -16,6 +16,7 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -151,6 +152,27 @@ public void testMultipleMissingIdsCauseSeparateIssues() throws Exception
.count());
}

/**
* Test that when Form`s child items have duplicate identifiers then each duplicated item except the first one
* has a marker.
*
* @throws Exception When first duplicated element has a marker
* or some of the consequent elements do not have a marker.
*/
@Test
public void testDuplicateIdCausesIssue() throws Exception
{
int duplicateElementsCount = 3;
IBmObject form = getTopObjectByFqn("Catalog.Catalog.Form.BadMerge.Form", getProject());
FormField user1Field = (FormField)findChildByName(form, "DescriptionByUser1");
Marker[] originalMarkers = markerManager.getNestedMarkers(getWorkspaceProject().get(), user1Field.bmGetId());
assertEquals("Should be no markers on first/original field", 0, originalMarkers.length);
FormField user2Field = (FormField)findChildByName(form, "DescriptionByUser2");
Marker[] duplicateMarkers = markerManager.getNestedMarkers(getWorkspaceProject().get(), user2Field.bmGetId());
assertEquals("Each duplicated field should have a marker", duplicateElementsCount, duplicateMarkers.length);
Arrays.stream(duplicateMarkers).forEach(marker -> assertMarkerIsCorrect(Optional.of(marker)));
}

@Override
protected String getTestConfigurationName()
{
Expand Down
Expand Up @@ -85,4 +85,13 @@
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
<forms uuid="d2deae20-7bc5-423c-a379-35d85ddc85c8">
<name>BadMerge</name>
<synonym>
<key>en</key>
<value>Bad merge</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
</mdclass:Catalog>
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core">
<filter>
<viewMode>Normal</viewMode>
<userSettingID>64ebb8e8-371c-49da-8a6c-a41b66d95d09</userSettingID>
</filter>
<order>
<viewMode>Normal</viewMode>
<userSettingID>5326979f-5344-4b43-bf79-581fc8aacf47</userSettingID>
</order>
<conditionalAppearance>
<viewMode>Normal</viewMode>
<userSettingID>88adf09f-d919-4463-851e-e58aa84fba07</userSettingID>
</conditionalAppearance>
<itemsViewMode>Normal</itemsViewMode>
<itemsUserSettingID>8d5349c9-832b-4b02-ad57-c0ba163a9338</itemsUserSettingID>
</Settings>

0 comments on commit 03b8b87

Please sign in to comment.