• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ParadoxGameConverters / Fronter.NET / 14321656274

07 Apr 2025 11:37PM UTC coverage: 18.268% (-0.5%) from 18.767%
14321656274

Pull #836

github

web-flow
Merge b3fa74626 into 3595560ad
Pull Request #836: Add text input mode to date selector

73 of 656 branches covered (11.13%)

Branch coverage included in aggregate %.

3 of 62 new or added lines in 2 files covered. (4.84%)

547 of 2738 relevant lines covered (19.98%)

9.35 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

35.4
/Fronter.NET/Models/Configuration/Options/DateSelector.cs
1
using Avalonia.Data;
2
using commonItems;
3
using ReactiveUI;
4
using System;
5
using System.Linq;
6

7
namespace Fronter.Models.Configuration.Options;
8

9
public sealed class DateSelector : ReactiveObject {
10
        public DateSelector(BufferedReader reader) {
12✔
11
                var parser = new Parser();
6✔
12
                RegisterKeys(parser);
6✔
13
                parser.ParseStream(reader);
6✔
14
        }
6✔
15
        private void RegisterKeys(Parser parser) {
6✔
16
                parser.RegisterKeyword("editable", reader => Editable = string.Equals(reader.GetString(), "true", StringComparison.OrdinalIgnoreCase));
12✔
17
                parser.RegisterKeyword("value", reader => {
12✔
18
                        var valueStr = reader.GetString();
6✔
19
                        Value = string.IsNullOrWhiteSpace(valueStr) ? null : new Date(valueStr);
6✔
20
                });
12✔
21
                parser.RegisterKeyword("minDate", reader => MinDate = new Date(reader.GetString()).ToDateTimeOffset());
12✔
22
                parser.RegisterKeyword("maxDate", reader => MaxDate = new Date(reader.GetString()).ToDateTimeOffset());
12✔
23
                parser.RegisterKeyword("tooltip", reader => Tooltip = reader.GetString());
12✔
24
                parser.RegisterRegex(CommonRegexes.Catchall, ParserHelpers.IgnoreAndLogItem);
6✔
25
        }
6✔
26

27
        public bool Editable { get; private set; } = true; // editable unless disabled
12✔
28
        public DateTimeOffset MinDate { get; set; } = DateTimeOffset.MinValue;
12✔
29
        public DateTimeOffset MaxDate { get; set; } = DateTimeOffset.MaxValue;
12✔
30

31
        public DateTimeOffset? DateTimeOffsetValue {
32
                get;
3✔
33
                set => this.RaiseAndSetIfChanged(ref field, value);
15✔
34
        }
35

36
        public Date? Value {
37
                get {
2✔
38
                        if (DateTimeOffsetValue is null) {
3✔
39
                                return null;
1✔
40
                        }
41

42
                        var offsetValue = DateTimeOffsetValue.Value;
1✔
43
                        return new Date(offsetValue);
1✔
44
                }
2✔
45
                set {
15✔
46
                        if (value is null) {
22✔
47
                                DateTimeOffsetValue = null;
7✔
48
                        } else {
15✔
49
                                DateTimeOffsetValue = value.ToDateTimeOffset();
8✔
50
                        }
8✔
51
                }
15✔
52
        }
53

54
        public string? TextValue {
NEW
55
                get => Value?.ToString();
×
NEW
56
                set {
×
NEW
57
                        if (string.IsNullOrWhiteSpace(value)) {
×
NEW
58
                                DateTimeOffsetValue = null;
×
NEW
59
                        } else {
×
NEW
60
                                var dateElements = value.Split('.').Where(x => !string.IsNullOrEmpty(x)).ToArray();
×
NEW
61
                                if (dateElements.Length >= 3) {
×
NEW
62
                                        ValidateYearString(dateElements[0]);
×
NEW
63
                                        ValidateMonthString(dateElements[1]);
×
NEW
64
                                        ValidateDayString(dateElements[2]);
×
NEW
65
                                } else if (dateElements.Length == 2) {
×
NEW
66
                                        ValidateYearString(dateElements[0]);
×
NEW
67
                                        ValidateMonthString(dateElements[1]);
×
NEW
68
                                } else if (dateElements.Length == 1) {
×
NEW
69
                                        ValidateYearString(dateElements[0]);
×
NEW
70
                                } else {
×
NEW
71
                                        throw new DataValidationException($"'{value}' is not a valid date, it should be in the format YYYY.MM.DD.");
×
72
                                }
73

NEW
74
                                DateTimeOffsetValue = new Date(value).ToDateTimeOffset();
×
NEW
75
                        }
×
NEW
76
                        this.RaisePropertyChanged(nameof(TextValue));
×
NEW
77
                }
×
78
        }
79

NEW
80
        private static void ValidateYearString(string value) {
×
NEW
81
                if (!int.TryParse(value, out var year)) {
×
NEW
82
                        throw new DataValidationException($"'{value}' is not a valid integer.");
×
83
                }
NEW
84
        }
×
NEW
85
        private static void ValidateMonthString(string value) {
×
NEW
86
                if (!int.TryParse(value, out var month)) {
×
NEW
87
                        throw new DataValidationException($"'{value}' is not a valid integer.");
×
88
                }
NEW
89
                if (month is < 1 or > 12) {
×
NEW
90
                        throw new DataValidationException($"'{value}' is not a valid month, it should be between 1 and 12.");
×
91
                }
NEW
92
        }
×
NEW
93
        private static void ValidateDayString(string value) {
×
NEW
94
                if (!int.TryParse(value, out var day)) {
×
NEW
95
                        throw new DataValidationException($"'{value}' is not a valid integer.");
×
96
                }
NEW
97
                if (day is < 1 or > 31) {
×
NEW
98
                        throw new DataValidationException($"'{value}' is not a valid day, it should be between 1 and 31.");
×
99
                }
NEW
100
        }
×
101

102
        public string? Tooltip { get; private set; }
6✔
103

104
        public bool UseDatePicker {
NEW
105
                get;
×
NEW
106
                set => this.RaiseAndSetIfChanged(ref field, value);
×
107
        } = false;
6✔
108

NEW
109
        public void ToggleUseDatePicker() {
×
NEW
110
                UseDatePicker = !UseDatePicker;
×
NEW
111
        }
×
112
        public void ClearValue() {
×
NEW
113
                TextValue = null;
×
114
        }
×
115
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc