Conversation
|
|
||
| public static class ObjectExtensions | ||
| { | ||
| public static string PrintToString<T>(this T obj) |
There was a problem hiding this comment.
А тебе название PrintToString не кажется странным? Мб просто Print эти экстеншоны назовём?
| this TypePrintingConfig<TOwner, TProp> config, CultureInfo cultureInfo) | ||
| where TProp : IFormattable | ||
| { | ||
| config.Config.TypeCultures[typeof(TProp)] = cultureInfo; |
There was a problem hiding this comment.
Не нравится, что напрямую во внутрянку конфига лезешь, что-то там изменяешь и вообще что знаешь, как там и что делать ("возьму тип Prop, он будет ключом словаря, по этому ключу положу cultureInfo"). Мб сделаем методы, которые будут этим заниматься и просто снаружи будем их дёргать?
Бтв, я видел, что коллекции вложенного конфига имеют модификатор internal, дак вот если ты имел ввиду, что снаружи твоей либы интернал-членами никто не сможет воспользоваться, то остаются такие недостатки:
- все, кто используют Config, становятся зависимыми от знаний о его внутренней реализации (то, что там дефолтный словарь, который умеет в оператор
[]) - если ты его заменишь на что-нибудь другое, придётся во всех похожих местах поменять код соответственно - другим разработчикам вряд ли захочется помнить обо всех особенностях добавления культуры в твой класс, им захочется иметь простой интерфейс, чтобы вызвать его и забыть
| return string.Empty; | ||
| } | ||
|
|
||
| if (!type.IsValueType) |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| private string PrintToString(object? obj, int nestingLevel, HashSet<object> visited) | ||
| { | ||
| if (nestingLevel > maxRecursionDepth) | ||
| { |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| return PrintObject(obj, nestingLevel, visited); | ||
| } | ||
|
|
||
| private string PrintObject(object obj, int nestingLevel, HashSet<object> visited) |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
|
|
||
| public partial class ObjectPrintingTests | ||
| { | ||
| public partial class CollectionTests |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
|
|
||
| var result = printer.PrintToString(data); | ||
|
|
||
| result.Should() |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| var printer = ObjectPrinter.For<Dictionary<CollectionTestsClass, Department>>(); | ||
| var result = printer.PrintToString(dict); | ||
|
|
||
| result.Should().MatchRegex( |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
|
|
||
|
|
||
| [Test] | ||
| public void PrintToString_ExcludedType_ShouldNotSerializeMembersOfThatType() |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| { | ||
| var dict = new Dictionary<CollectionTestsClass, Department> | ||
| { | ||
| [new CollectionTestsClass { Name = "Manager" }] = new Department { Name = "HR" }, |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| } | ||
|
|
||
| [Test] | ||
| public void TrimToLength_NotPositiveValue_ShouldThrowArgumentException() |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
|
|
||
| namespace Tests.Tests; | ||
|
|
||
| public partial class ObjectPrintingTests |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| .And.NotContain("level16"); | ||
| } | ||
|
|
||
| [TestCase(0)] |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
|
|
||
| var result = printer.PrintToString(testData); | ||
|
|
||
| await Verify(result); |
There was a problem hiding this comment.
Эти тестики тоже падают. Эта штука пытается сравнивать какие-то файлы, которые сама создаёт, один из них пустой . А ещё она пытается процес с visual studio запустить.
@dmrz1n