@@ -119,6 +119,54 @@ void Callback(LogLevel l, object state)
119119 Assert . Equal ( expected , message ) ;
120120 }
121121
122+ [ Theory ]
123+ [ InlineData ( "name\n " , "reason" , "name" , "reason" ) ]
124+ [ InlineData ( "name\n \r " , "reason" , "name" , "reason" ) ]
125+ [ InlineData ( "name\r " , "reason" , "name" , "reason" ) ]
126+ [ InlineData ( "name\r \n " , "reason" , "name" , "reason" ) ]
127+ [ InlineData ( "name\n \n " , "reason" , "name" , "reason" ) ]
128+ [ InlineData ( "name" , "reason" , "name" , "reason" ) ]
129+ [ InlineData ( "name" , "reason\n " , "name" , "reason " ) ]
130+ [ InlineData ( "name" , "reason\n \r " , "name" , "reason " ) ]
131+ [ InlineData ( "name" , "reason\r " , "name" , "reason " ) ]
132+ [ InlineData ( "name" , "reason\r \n " , "name" , "reason " ) ]
133+ [ InlineData ( "name" , "reason\n \n " , "name" , "reason " ) ]
134+ [ InlineData ( "name" , "reason\n line2" , "name" , "reason line2" ) ]
135+ [ InlineData ( "name" , "reason\n line2\n line3" , "name" , "reason line2 line3" ) ]
136+ public async Task ReplacesLineEndingsInUsernameAndReasonWithSpace ( string username , string reason , string expectedName , string expectedReason )
137+ {
138+ // Arrange.
139+ var ban = new Ban ( ) { Username = username , Admin = "admin" , Reason = reason } ;
140+ const string serverId = "serverId" ;
141+ const bool sync = true ;
142+
143+ var eventRaised = new AsyncManualResetEvent ( ) ;
144+ FactorioBanEventArgs ? eventArgs = null ;
145+ void FactorioBanService_BanChanged ( IFactorioBanService sender , FactorioBanEventArgs ev )
146+ {
147+ eventArgs = ev ;
148+ eventRaised . Set ( ) ;
149+ }
150+
151+ factorioBanService . BanChanged += FactorioBanService_BanChanged ;
152+
153+ // Act.
154+ await factorioBanService . AddBan ( ban , serverId , sync , "" ) ;
155+ await eventRaised . WaitAsyncWithTimeout ( 5000 ) ;
156+
157+ // Assert.
158+ Assert . NotNull ( eventArgs ) ;
159+ Assert . Equal ( serverId , eventArgs ! . Source ) ;
160+ Assert . Equal ( sync , eventArgs . SynchronizeWithServers ) ;
161+
162+ var changeData = eventArgs . ChangeData ;
163+
164+ Assert . Equal ( CollectionChangeType . Add , changeData . Type ) ;
165+ Assert . Single ( changeData . NewItems ) ;
166+ Assert . Equal ( expectedName , changeData . NewItems [ 0 ] . Username ) ;
167+ Assert . Equal ( expectedReason , changeData . NewItems [ 0 ] . Reason ) ;
168+ }
169+
122170 [ Fact ]
123171 public async Task DoesNotAddDuplicateBan ( )
124172 {
0 commit comments