Skip to content

Commit 26c189f

Browse files
committed
Инструкции обработки в ЗаписатьТекущий.
1 parent 5e4e5a8 commit 26c189f

File tree

2 files changed

+74
-1
lines changed

2 files changed

+74
-1
lines changed

src/OneScript.StandardLibrary/Xml/XmlWriterImpl.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,9 +217,11 @@ public void WriteCurrent(XmlReaderImpl reader)
217217
case XmlNodeType.EntityReference:
218218
WriteEntityReference(reader.Name);
219219
break;
220+
case XmlNodeType.ProcessingInstruction:
221+
WriteProcessingInstruction(reader.Name, reader.Value);
222+
break;
220223
case XmlNodeType.Entity:
221224
case XmlNodeType.EndEntity:
222-
case XmlNodeType.ProcessingInstruction:
223225
case XmlNodeType.Document:
224226
case XmlNodeType.DocumentFragment:
225227
case XmlNodeType.Notation:

tests/xmlwrite.os

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
ВсеТесты.Добавить("ТестДолжен_ЗаписатьТекущий_Комментарий");
4141
ВсеТесты.Добавить("ТестДолжен_ЗаписатьТекущий_СсылкаНаСушность");
4242
ВсеТесты.Добавить("ТестДолжен_ЗаписатьТекущий_ПолноеКопирование");
43+
ВсеТесты.Добавить("ТестДолжен_ЗаписатьТекущий_ИнструкцииОбработки");
4344

4445
ВсеТесты.Добавить("ТестДолжен_ЗаписатьТекущий_ОбъявлениеИТипДокумента");
4546

@@ -631,6 +632,67 @@
631632

632633
КонецПроцедуры
633634

635+
Процедура ТестДолжен_ЗаписатьТекущий_ИнструкцииОбработки() Экспорт
636+
637+
Перем ЧтениеXML, ЗаписьXML;
638+
639+
ПодготовитьТестовыеДанныеДляЗаписиТекущего(ЧтениеXML, ЗаписьXML);
640+
641+
ДойтиДоИмени(ЧтениеXML, "PI");
642+
ПрочитатьИПроверитьТип(ЧтениеXML, ТипУзлаXML.ИнструкцияОбработки);
643+
644+
ЗаписьXML.ЗаписатьНачалоЭлемента("эл");
645+
ЗаписьXML.ЗаписатьТекущий(ЧтениеXML);
646+
ЗаписьXML.ЗаписатьКонецЭлемента();
647+
648+
ПолученныйТекст = ЗаписьXML.Закрыть();
649+
650+
// Несовместимость: dotnet всегда добавляет пробел, даже если нет текста инструкции
651+
юТест.ПроверитьРавенство("<эл><?инструкция ?></эл>",
652+
// ^
653+
ПолученныйТекст,
654+
"Инструкция обработки");
655+
656+
ПрочитатьИПроверитьТип(ЧтениеXML, ТипУзлаXML.КонецЭлемента);
657+
ЧтениеXML.Прочитать();
658+
659+
//
660+
661+
ПодготовитьЗаписьXML(ЗаписьXML);
662+
ДойтиДоИмени(ЧтениеXML, "PI");
663+
ПрочитатьИПроверитьТип(ЧтениеXML, ТипУзлаXML.ИнструкцияОбработки);
664+
665+
ЗаписьXML.ЗаписатьНачалоЭлемента("эл");
666+
ЗаписьXML.ЗаписатьТекущий(ЧтениеXML);
667+
ЗаписьXML.ЗаписатьКонецЭлемента();
668+
669+
ПолученныйТекст = ЗаписьXML.Закрыть();
670+
671+
юТест.ПроверитьРавенство("<эл><?инструкция с произвольным текстом внутри?></эл>",
672+
ПолученныйТекст,
673+
"Инструкция обработки с текстом");
674+
675+
ПрочитатьИПроверитьТип(ЧтениеXML, ТипУзлаXML.КонецЭлемента);
676+
ЧтениеXML.Прочитать();
677+
678+
//
679+
680+
ПодготовитьЗаписьXML(ЗаписьXML);
681+
ДойтиДоИмени(ЧтениеXML, "PI");
682+
ПрочитатьИПроверитьТип(ЧтениеXML, ТипУзлаXML.ИнструкцияОбработки);
683+
684+
ЗаписьXML.ЗаписатьНачалоЭлемента("эл");
685+
ЗаписьXML.ЗаписатьТекущий(ЧтениеXML);
686+
ЗаписьXML.ЗаписатьКонецЭлемента();
687+
688+
ПолученныйТекст = ЗаписьXML.Закрыть();
689+
690+
юТест.ПроверитьРавенство("<эл><?инструкция с произвольным текстом внутри и &lt;служебными&nbsp;символами&gt;?></эл>",
691+
ПолученныйТекст,
692+
"Инструкция обработки с текстом и служебными символами");
693+
694+
КонецПроцедуры
695+
634696
Процедура ПодготовитьТестовыеДанныеДляЗаписиТекущего(ЧтениеXML, ЗаписьXML)
635697

636698
ПодопытныйТекст =
@@ -643,6 +705,9 @@
643705
| <БлокСКомментарием> <!-- Комментарий --> </БлокСКомментарием>
644706
| <entity>&СсылкаНаСущность;</entity>
645707
| <entity2>Это &СсылкаНаСущность;</entity2>
708+
| <PI><?инструкция?></PI>
709+
| <PI><?инструкция с произвольным текстом внутри?></PI>
710+
| <PI><?инструкция с произвольным текстом внутри и &lt;служебными&nbsp;символами&gt;?></PI>
646711
|</xml>"
647712
;
648713

@@ -663,6 +728,12 @@
663728
ЧтениеXML = Новый ЧтениеXML;
664729
ЧтениеXML.УстановитьСтроку(ПодопытныйТекст, ПараметрыЧтения);
665730

731+
ПодготовитьЗаписьXML(ЗаписьXML);
732+
733+
КонецПроцедуры
734+
735+
Процедура ПодготовитьЗаписьXML(ЗаписьXML)
736+
666737
ПараметрыЗаписи = Новый ПараметрыЗаписиXml(, , Ложь); // без переносов
667738

668739
ЗаписьXML = Новый ЗаписьXML;

0 commit comments

Comments
 (0)