1+ //This file is part of AudioCuesheetEditor.
2+
3+ //AudioCuesheetEditor is free software: you can redistribute it and/or modify
4+ //it under the terms of the GNU General Public License as published by
5+ //the Free Software Foundation, either version 3 of the License, or
6+ //(at your option) any later version.
7+
8+ //AudioCuesheetEditor is distributed in the hope that it will be useful,
9+ //but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ //GNU General Public License for more details.
12+
13+ //You should have received a copy of the GNU General Public License
14+ //along with Foobar. If not, see
15+ //<http: //www.gnu.org/licenses />.
16+ using AudioCuesheetEditor . Data . Options ;
17+ using AudioCuesheetEditor . Model . AudioCuesheet ;
18+ using AudioCuesheetEditor . Model . Options ;
19+ using AudioCuesheetEditor . Services . UI ;
20+ using Microsoft . VisualStudio . TestTools . UnitTesting ;
21+ using Moq ;
22+ using System ;
23+ using System . Linq . Expressions ;
24+ using System . Threading . Tasks ;
25+
26+ namespace AudioCuesheetEditor . Tests . Services . UI
27+ {
28+ [ TestClass ( ) ]
29+ public class ApplicationOptionsTimeSpanParserTests
30+ {
31+ [ TestMethod ]
32+ public async Task TimespanTextChanged_ValidInput_SetsPropertyCorrectly ( )
33+ {
34+ // Arrange
35+ var options = new ApplicationOptions ( )
36+ {
37+ TimeSpanFormat = new ( )
38+ {
39+ Scheme = "Minutes:Seconds"
40+ }
41+ } ;
42+ var mockOptionsProvider = new Mock < ILocalStorageOptionsProvider > ( ) ;
43+ mockOptionsProvider
44+ . Setup ( p => p . GetOptions < ApplicationOptions > ( ) )
45+ . ReturnsAsync ( options ) ;
46+ var parser = new ApplicationOptionsTimeSpanParser ( mockOptionsProvider . Object ) ;
47+ await Task . Delay ( 50 ) ;
48+ var track = new Track ( ) ;
49+ // Act
50+ await parser . TimespanTextChanged ( track , x => x . Begin , "92:12" ) ;
51+ // Assert
52+ Assert . AreEqual ( new TimeSpan ( 1 , 32 , 12 ) , track . Begin ) ;
53+ }
54+
55+ [ TestMethod ]
56+ public async Task TimespanTextChanged_InvalidInput_SetsNull ( )
57+ {
58+ var options = new ApplicationOptions ( )
59+ {
60+ TimeSpanFormat = new ( )
61+ {
62+ Scheme = "Minutes:Seconds"
63+ }
64+ } ;
65+ var mockOptionsProvider = new Mock < ILocalStorageOptionsProvider > ( ) ;
66+ mockOptionsProvider
67+ . Setup ( p => p . GetOptions < ApplicationOptions > ( ) )
68+ . ReturnsAsync ( options ) ;
69+ var parser = new ApplicationOptionsTimeSpanParser ( mockOptionsProvider . Object ) ;
70+ await Task . Delay ( 50 ) ;
71+ var track = new Track ( ) ;
72+ // Act
73+ await parser . TimespanTextChanged ( track , x => x . End , "not a time" ) ;
74+ // Assert
75+ Assert . IsNull ( track . End ) ;
76+ }
77+
78+ [ TestMethod ( ) ]
79+ public async Task GetTimespanFormatted_ValidFormat_ReturnsCorrectString ( )
80+ {
81+ // Arrange
82+ var options = new ApplicationOptions ( )
83+ {
84+ DisplayTimeSpanFormat = @"hh\:mm\:ss"
85+ } ;
86+ var mockOptionsProvider = new Mock < ILocalStorageOptionsProvider > ( ) ;
87+ mockOptionsProvider
88+ . Setup ( p => p . GetOptions < ApplicationOptions > ( ) )
89+ . ReturnsAsync ( options ) ;
90+ var parser = new ApplicationOptionsTimeSpanParser ( mockOptionsProvider . Object ) ;
91+ await Task . Delay ( 50 ) ;
92+ // Act
93+ var result = parser . GetTimespanFormatted ( new TimeSpan ( 0 , 1 , 30 , 27 , 200 , 103 ) ) ;
94+ // Assert
95+ Assert . AreEqual ( "01:30:27" , result ) ;
96+ }
97+
98+ [ TestMethod ( ) ]
99+ public async Task GetTimespanFormatted_InvalidFormat_FallbackToDefault ( )
100+ {
101+ // Arrange
102+ var options = new ApplicationOptions ( )
103+ {
104+ DisplayTimeSpanFormat = "INVALID_FORMAT"
105+ } ;
106+ var mockOptionsProvider = new Mock < ILocalStorageOptionsProvider > ( ) ;
107+ mockOptionsProvider
108+ . Setup ( p => p . GetOptions < ApplicationOptions > ( ) )
109+ . ReturnsAsync ( options ) ;
110+ var parser = new ApplicationOptionsTimeSpanParser ( mockOptionsProvider . Object ) ;
111+ await Task . Delay ( 50 ) ;
112+ // Act
113+ var result = parser . GetTimespanFormatted ( new TimeSpan ( 0 , 1 , 30 , 27 , 200 , 103 ) ) ;
114+ // Assert
115+ Assert . AreEqual ( "01:30:27.2001030" , result ) ;
116+ }
117+ }
118+ }
0 commit comments