< Summary

Information
Class: ValidateLib.Metadata.Validators.ColumnNamesValidator
Assembly: validatelib.dll
File(s): C:\skola_karlovka\RP\code\csv-validator\CSV_Validator\ValidateLib\Metadata\Validators\ColumnNamesValidator.cs
Line coverage
100%
Covered lines: 13
Uncovered lines: 0
Coverable lines: 13
Total lines: 39
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBlocks covered Blocks not covered
Validate(...)232
HasNoDuplicates(...)160

File(s)

C:\skola_karlovka\RP\code\csv-validator\CSV_Validator\ValidateLib\Metadata\Validators\ColumnNamesValidator.cs

#LineLine coverage
 1using ValidateLib.ErrorsAndWarnings.Errors;
 2using ValidateLib.ErrorsAndWarnings.Warnings;
 3using ValidateLib.Metadata.Descriptors;
 4
 5namespace ValidateLib.Metadata.Validators
 6{
 7    public class ColumnNamesValidator : IMValidator<SchemaDescriptor>
 8    {
 9        string? _duplicateValue;
 10        public List<Warning> Validate(SchemaDescriptor schemaDescriptor)
 11        {
 12
 113            List<Warning> warnings = new List<Warning>();
 114            if (schemaDescriptor.columns?._value?.Count > 0)
 15            {
 116                var names = from column in schemaDescriptor.columns._value where column.name != null select column?.name
 117                bool hasNoDuplicates = HasNoDuplicates(names);
 118                if (!hasNoDuplicates) ErrorFactory.ThrowIdenticalColumnNamesError(_duplicateValue!);
 19            }
 120            return warnings;
 21        }
 22
 23        bool HasNoDuplicates(IEnumerable<string> strings)
 24        {
 125            HashSet<string> seenStrings = new HashSet<string>();
 26
 127            foreach (string s in strings)
 28            {
 129                if (!seenStrings.Add(s))
 30                {
 131                    _duplicateValue = s;
 132                    return false; // Found a duplicate
 33                }
 34            }
 35
 136            return true; // No duplicates found
 137        }
 38    }
 39}