Skip to content

Commit 1109c78

Browse files
committed
fix regress #222
возвращен порядок объектов конфигурации
1 parent e450277 commit 1109c78

File tree

4 files changed

+124
-6
lines changed

4 files changed

+124
-6
lines changed

src/main/java/com/github/_1c_syntax/bsl/reader/common/context/MDCReaderContext.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.util.Collections;
3838
import java.util.List;
3939
import java.util.Objects;
40+
import java.util.stream.Collectors;
4041

4142
/**
4243
* Служебный класс для хранения контекста при "сборке" объекта при чтении из файла
@@ -114,13 +115,16 @@ private void setValueChildren() {
114115
var children = childrenNames.parallelStream()
115116
.map(fullName -> (MD) mdReader.read(fullName))
116117
.filter(Objects::nonNull)
117-
.toList();
118+
.collect(Collectors.toMap(md -> md.getMdoReference().getMdoRef(), md -> md));
118119

119-
children.forEach((MD child) -> {
120+
// после обработки порядок нарушился, необходимо его соблюсти
121+
childrenNames.forEach((String name) -> {
122+
var child = children.get(name);
123+
if (child != null) {
120124
var fieldName = child.getMdoType().getName();
121125
setValue(fieldName, child);
122126
setValue(CHILD_FILED_NAME, child);
123127
}
124-
);
128+
});
125129
}
126130
}

src/test/java/com/github/_1c_syntax/bsl/mdclasses/ConfigurationTest.java

Lines changed: 115 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
import org.junit.jupiter.params.aggregator.ArgumentsAccessor;
3737
import org.junit.jupiter.params.provider.CsvSource;
3838

39+
import java.util.List;
40+
3941
import static org.assertj.core.api.Assertions.assertThat;
4042

4143

@@ -211,7 +213,7 @@ void testFullMdclasses(ArgumentsAccessor argumentsAccessor) {
211213
@ParameterizedTest
212214
@CsvSource(
213215
{
214-
"false, mdclasses_ext",
216+
"false, mdclasses_ext"
215217
}
216218
)
217219
void testFullExt(ArgumentsAccessor argumentsAccessor) {
@@ -227,6 +229,9 @@ void testFullExt(ArgumentsAccessor argumentsAccessor) {
227229
// проверка состава дочерних
228230
checkChildrenExt(cf);
229231

232+
// проверка порядок
233+
checkChildrenOrder(cf);
234+
230235
assertThat(cf.getPlainChildren())
231236
.hasSize(147)
232237
.allMatch(md -> md.getSupportVariant().equals(SupportVariant.NONE));
@@ -241,6 +246,21 @@ void testFullExt(ArgumentsAccessor argumentsAccessor) {
241246
.isEmpty();
242247
}
243248

249+
@ParameterizedTest
250+
@CsvSource(
251+
{
252+
"true, mdclasses_ext, _edt"
253+
}
254+
)
255+
void testFullExtEdt(ArgumentsAccessor argumentsAccessor) {
256+
var mdc = MDTestUtils.readConfiguration(argumentsAccessor, false);
257+
assertThat(mdc).isInstanceOf(ConfigurationExtension.class);
258+
var cf = (ConfigurationExtension) mdc;
259+
260+
// проверка порядок
261+
checkChildrenOrder(cf);
262+
}
263+
244264
@ParameterizedTest
245265
@CsvSource(
246266
{
@@ -878,4 +898,98 @@ private static void checkChildrenExt(ConfigurationExtension cf) {
878898
cf.getExternalDataSources().size());
879899
}
880900

901+
private static void checkChildrenOrder(ConfigurationExtension cf) {
902+
var ordered = List.of("Language.Русский",
903+
"Subsystem.ПерваяПодсистема",
904+
"Subsystem.ПерваяПодсистема1",
905+
"StyleItem.ЭлементСтиля1",
906+
"StyleItem.ЭлементСтиля2",
907+
"Style.Стиль1",
908+
"Style.Стиль2",
909+
"CommonPicture.ОбщаяКартинка1",
910+
"CommonPicture.ОбщаяКартинка2",
911+
"SessionParameter.ПараметрСеанса1",
912+
"SessionParameter.ПараметрСеанса2",
913+
"Role.Роль1",
914+
"Role.Роль2",
915+
"CommonTemplate.Макет",
916+
"CommonTemplate.Макет1",
917+
"FilterCriterion.КритерийОтбора1",
918+
"FilterCriterion.КритерийОтбора2",
919+
"CommonModule.ПростойОбщийМодуль",
920+
"CommonModule.ОбщийМодульВызовСервера",
921+
"CommonModule.ОбщийМодульПовтИспВызов",
922+
"CommonModule.ОбщийМодульПовтИспСеанс",
923+
"CommonModule.ОбщийМодульПолныйеПрава",
924+
"CommonModule.ПростойОбщийМодуль1",
925+
"CommonModule.ОбщийМодульВызовСервера1",
926+
"CommonModule.ОбщийМодульПовтИспВызов1",
927+
"CommonModule.ОбщийМодульПовтИспСеанс1",
928+
"CommonAttribute.ОбщийРеквизит1",
929+
"ExchangePlan.ПланОбмена1",
930+
"ExchangePlan.ПланОбмена2",
931+
"XDTOPackage.ПакетXDTO1",
932+
"XDTOPackage.ПакетXDTO2",
933+
"WebService.WebСервис1",
934+
"WebService.WebСервис2",
935+
"HTTPService.HTTPСервис1",
936+
"HTTPService.HTTPСервис2",
937+
"WSReference.WSСсылка1",
938+
"WSReference.WSСсылка2",
939+
"EventSubscription.ПодпискаНаСобытие1",
940+
"ScheduledJob.РегламентноеЗадание1",
941+
"SettingsStorage.ХранилищеНастроек1",
942+
"FunctionalOption.ФункциональнаяОпция1",
943+
"FunctionalOption.ФункциональнаяОпция2",
944+
"FunctionalOptionsParameter.ПараметрФункциональныхОпций1",
945+
"FunctionalOptionsParameter.ПараметрФункциональныхОпций2",
946+
"DefinedType.ОпределяемыйТип1",
947+
"CommonCommand.ОбщаяКоманда1",
948+
"CommonCommand.ОбщаяКоманда2",
949+
"CommandGroup.ГруппаКоманд1",
950+
"CommandGroup.ГруппаКоманд2",
951+
"Constant.Константа1",
952+
"Constant.Константа2",
953+
"CommonForm.Форма",
954+
"CommonForm.Форма1",
955+
"Catalog.Справочник1",
956+
"Catalog.Справочник2",
957+
"Document.Документ1",
958+
"Document.Документ2",
959+
"DocumentNumerator.НумераторДокументов1",
960+
"Sequence.Последовательность1",
961+
"DocumentJournal.ЖурналДокументов1",
962+
"Enum.Перечисление1",
963+
"Enum.Перечисление2",
964+
"Report.Отчет1",
965+
"Report.Отчет2",
966+
"DataProcessor.Обработка1",
967+
"DataProcessor.Обработка2",
968+
"InformationRegister.РегистрСведений1",
969+
"InformationRegister.РегистрСведений2",
970+
"InformationRegister.РегистрСведений3",
971+
"InformationRegister.РегистрСведений4",
972+
"AccumulationRegister.РегистрНакопления1",
973+
"AccumulationRegister.РегистрНакопления2",
974+
"ChartOfCharacteristicTypes.ПланВидовХарактеристик1",
975+
"ChartOfCharacteristicTypes.ПланВидовХарактеристик2",
976+
"ChartOfAccounts.ПланСчетов1",
977+
"ChartOfAccounts.ПланСчетов2",
978+
"AccountingRegister.РегистрБухгалтерии1",
979+
"AccountingRegister.РегистрБухгалтерии2",
980+
"ChartOfCalculationTypes.ПланВидовРасчета1",
981+
"ChartOfCalculationTypes.ПланВидовРасчета2",
982+
"CalculationRegister.РегистрРасчета2",
983+
"CalculationRegister.РегистрРасчета1",
984+
"BusinessProcess.БизнесПроцесс1",
985+
"Task.Задача1");
986+
987+
assertThat(cf.getChildren()).hasSize(ordered.size());
988+
989+
for (int i = 0; i < cf.getChildren().size(); i++) {
990+
var original = cf.getChildren().get(i);
991+
var fixture = ordered.get(i);
992+
assertThat(fixture).isEqualTo(original.getMdoReference().getMdoRef());
993+
}
994+
}
881995
}

src/test/resources/ext/designer/mdclasses_ext/src/cf/Configuration.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,8 @@
137137
<AccountingRegister>РегистрБухгалтерии2</AccountingRegister>
138138
<ChartOfCalculationTypes>ПланВидовРасчета1</ChartOfCalculationTypes>
139139
<ChartOfCalculationTypes>ПланВидовРасчета2</ChartOfCalculationTypes>
140-
<CalculationRegister>РегистрРасчета1</CalculationRegister>
141140
<CalculationRegister>РегистрРасчета2</CalculationRegister>
141+
<CalculationRegister>РегистрРасчета1</CalculationRegister>
142142
<BusinessProcess>БизнесПроцесс1</BusinessProcess>
143143
<Task>Задача1</Task>
144144
</ChildObjects>

src/test/resources/ext/edt/mdclasses_ext/configuration/src/Configuration/Configuration.mdo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,8 @@
116116
<accountingRegisters>AccountingRegister.РегистрБухгалтерии2</accountingRegisters>
117117
<chartsOfCalculationTypes>ChartOfCalculationTypes.ПланВидовРасчета1</chartsOfCalculationTypes>
118118
<chartsOfCalculationTypes>ChartOfCalculationTypes.ПланВидовРасчета2</chartsOfCalculationTypes>
119-
<calculationRegisters>CalculationRegister.РегистрРасчета1</calculationRegisters>
120119
<calculationRegisters>CalculationRegister.РегистрРасчета2</calculationRegisters>
120+
<calculationRegisters>CalculationRegister.РегистрРасчета1</calculationRegisters>
121121
<businessProcesses>BusinessProcess.БизнесПроцесс1</businessProcesses>
122122
<tasks>Task.Задача1</tasks>
123123
</mdclass:Configuration>

0 commit comments

Comments
 (0)