Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Encoding.UTF8

572  
Murr патриот02.10.10 14:18
Murr
NEW 02.10.10 14:18 
И снова Я чего-то не понимаю....
Имеем объект типа System.Xml.XmlWriter
У объекта имеется свойство Settings типа System.Xml.XmlWriterSettings
Одна из пропертей - Encoding - типа System.Text.Encoding должна содержать вид кодировки. Ожидается, что будет UTF8
В тестах пишется соответствющий ассерт:
В ответ на:

Assert.That(xw.Settings.Encoding, Is.EqualTo(Encoding.UTF8));

В результате получается:
В ответ на:

Tests.ItemXmlWriter_Static_Tests.CreateXmlWriterSettings:
Expected: <System.Text.UTF8Encoding>
But was: <System.Text.UTF8Encoding>

И, блин, я опять не вижу разницы в буковках...
Или Я использовал не тот метод сравнения... но парой строк выше таким же способом сравнивался Settings.ConformanceLevel...
#1 
Knusprig посетитель04.10.10 16:28
Knusprig
04.10.10 16:28 
в ответ Murr 02.10.10 14:18
Я не знаю что это за язык, но похоже что ошибка в самой процедуре сравнения енкодингов.
Девки спорили на даче о свойствах ряда Фибоначчи
#2 
Murr патриот04.10.10 17:16
Murr
NEW 04.10.10 17:16 
в ответ Knusprig 04.10.10 16:28
Я не знаю что это за язык
------
Улыбнуло. И за одно напомнило, что писать надо всЁЁЁЁ...
Потому добавляю:
Среда исполнения - .NET 2.0
Код написан на C#
Утилита тестирования - NUnit, версия для .NET 2.0
Екодинги сравниваются где-то глубоко в недрах толи .NET, толи NUnit.
Какой именно метод выбрала среда тестирования - понятия не имею,
но в качестве теста написано именно то, что рекомендовано в доках...
Почему не сравнилось, тем более что оба операнда одинаковые - не понимаю...
#3 
Extern посетитель04.10.10 17:24
Extern
NEW 04.10.10 17:24 
в ответ Murr 02.10.10 14:18
Я бы продебагила) Чую, что equals не так ставнивает, как ты думаешь:)
#4 
NightWatch коренной житель04.10.10 17:43
NightWatch
NEW 04.10.10 17:43 
в ответ Murr 02.10.10 14:18
Может из-за этого...
В ответ на:
Remarks
Two UTF8Encoding objects are considered equal if all of the following conditions are true:
Both objects use the same byte order.
Both objects provide the byte order mark, or both do not.
Both objects throw an exception when encountering invalid encoding, or both do not.

#5 
Murr патриот04.10.10 17:56
Murr
NEW 04.10.10 17:56 
в ответ Extern 04.10.10 17:24
Я бы продебагила
-----
Так почти ничто не мешает. Все типы указаны, код - приведен...
Я серьезно - стандартный XmlWriter и проперть Settings и далее Encoding...
Достаточно сложить в кучку - две строки всего...
ну и добавить что-то из того, что мелкомягкие не выкладывают в свободный доступ.
Чую, что equals не так ставнивает
------
Эээ... Is.EqualTo()... это из NUnit... возможно, что он сравнивает не так... но тремя
строками выше сравнивается другая проперть, примерно такого же вида, т.е. enum,
и там все тип-топ...
Так что у меня подозрение на то, что что-то не так в коде мелкомягких...
#6 
Murr патриот04.10.10 18:02
Murr
NEW 04.10.10 18:02 
в ответ NightWatch 04.10.10 17:43
Надо смотреть...
Пока выделил проверку в отдельный не готовый тест и занялся другим...
Но оооочччеееенннььь странное поведение для двух однотипных элементов...
#7 
Murr патриот04.10.10 22:13
Murr
NEW 04.10.10 22:13 
в ответ Murr 04.10.10 18:02
Ну что же - загрузился в отладчике, сверил все доступные элементы сравниваемых объектов. Они одинаковые...
#8 
Murr патриот04.10.10 22:25
Murr
NEW 04.10.10 22:25 
в ответ Murr 04.10.10 22:13
Переписал как:

В ответ на:

XmlWriter xw...
Encoding utf8 = Encoding.UTF8;

Assert.IsTrue(
(utf8.BodyName == xw.Settings.Encoding.BodyName)
&& (utf8.CodePage == xw.Settings.Encoding.CodePage)
&& (utf8.WindowsCodePage == xw.Settings.Encoding.WindowsCodePage)
);

И пока так и оставлю...
Если кто раскопает в чем проблема - поделитесь, плс...
#9