1
- using System ;
1
+ using System ;
2
2
using System . Collections . Generic ;
3
3
using System . IO ;
4
4
using System . IO . Abstractions . TestingHelpers ;
5
5
using System . Linq ;
6
6
using System . Text ;
7
- using System . Xml . Linq ;
8
7
using Crowdin . Api . Typed ;
9
8
using Microsoft . Extensions . Configuration ;
10
9
using Newtonsoft . Json . Linq ;
@@ -306,8 +305,8 @@ public void AdditionalOptionsForXmlFiles()
306
305
const string trElt0 = "//string[@txt]" ;
307
306
const string trElt1a = "/cheese/wheel" ;
308
307
const string trElt1b = "/round[@round]" ;
309
- mockFileSystem . File . WriteAllText ( fileName0 , "<br />" ) ;
310
- mockFileSystem . File . WriteAllText ( fileName1 , "<br/ >" ) ;
308
+ mockFileSystem . File . WriteAllText ( fileName0 , "<string txt='something' />" ) ;
309
+ mockFileSystem . File . WriteAllText ( fileName1 , "<cheese><wheel>swiss</wheel></cheese >" ) ;
311
310
dynamic configJson = SetUpConfig ( fileName0 ) ;
312
311
var files = configJson . files ;
313
312
files [ 0 ] . translate_content = 0 ;
@@ -607,86 +606,14 @@ public void BatchEmptyFilesListDoesntCrash()
607
606
Assert . Empty ( result . First ( ) . Files ) ;
608
607
}
609
608
610
- // Tests for filtering unnecessary .resx files:
611
-
612
- [ Fact ]
613
- public void ResxFilterExcludesEmptyValues ( )
614
- {
615
- var elt = new XElement ( "data" , new XAttribute ( "name" , "someString" ) , new XElement ( "value" ) ) ;
616
- Assert . False ( CommandUtilities . HasLocalizableData ( elt ) ) ;
617
- }
618
-
619
- [ Theory ]
620
- [ InlineData ( "something.Icon" ) ]
621
- [ InlineData ( "something.Name" ) ]
622
- public void ResxFilterExcludesNonLocalizableStrings ( string dataName )
623
- {
624
- var elt = new XElement ( "data" , new XAttribute ( "name" , dataName ) , new XElement ( "value" , "content" ) ) ;
625
- Assert . False ( CommandUtilities . HasLocalizableData ( elt ) ) ;
626
- }
627
-
628
- [ Theory ]
629
- [ InlineData ( "someString" ) ]
630
- [ InlineData ( "something.Text" ) ]
631
- [ InlineData ( "something.AccessibleName" ) ]
632
- [ InlineData ( "something.AccessibleDescription" ) ]
633
- public void ResxFilterIncludesLocalizableStrings ( string dataName )
634
- {
635
- var elt = new XElement ( "data" , new XAttribute ( "name" , dataName ) , new XElement ( "value" , "content" ) ) ;
636
- Assert . True ( CommandUtilities . HasLocalizableData ( elt ) ) ;
637
- }
638
-
639
- [ Fact ]
640
- public void ResxFilterIncludesLocalizableDocuments ( )
641
- {
642
- var doc = XDocument . Load ( new StringReader ( ResxOpenTag + ResxLocalizableData + ResxNonLocalizableData + ResxCloseTag ) ) ;
643
- Assert . True ( CommandUtilities . HasLocalizableData ( doc ) ) ;
644
- }
645
-
646
- /// <remarks>
647
- /// Crowdin imports whitespaces strings, but they are hidden by default and localizers are instructed not to localize spaces.
648
- /// </remarks>
649
- [ Fact ]
650
- public void ResxFilterExcludesLocalizableWhitespace ( )
651
- {
652
- var doc = XDocument . Load ( new StringReader ( ResxOpenTag + ResxLocalizableWhitespace + ResxCloseTag ) ) ;
653
- Assert . False ( CommandUtilities . HasLocalizableData ( doc ) ) ;
654
- }
655
-
656
609
[ Fact ]
657
- public void ResxFilterExcludesNonLocalizableDocuments ( )
658
- {
659
- var doc = XDocument . Load ( new StringReader ( ResxOpenTag + ResxEmptyLocalizableData + ResxNonLocalizableData + ResxCloseTag ) ) ;
660
- Assert . False ( CommandUtilities . HasLocalizableData ( doc ) ) ;
661
- }
662
-
663
- [ Theory ]
664
- [ InlineData ( true ) ]
665
- [ InlineData ( false ) ]
666
- public void FilterFiltersResx ( bool hasLocalizableData )
667
- {
668
- var mockFileSystem = new MockFileSystem ( ) ;
669
- const string fileName = "test.resx" ;
670
- mockFileSystem . File . WriteAllText ( fileName , ResxOpenTag + ( hasLocalizableData ? ResxLocalizableData : string . Empty ) + ResxCloseTag ) ;
671
- Assert . Equal ( hasLocalizableData , CommandUtilities . IsLocalizable ( fileName , mockFileSystem ) ) ;
672
- }
673
-
674
- [ Fact ]
675
- public void FilterFiltersOnlyResx ( )
676
- {
677
- var mockFileSystem = new MockFileSystem ( ) ;
678
- const string fileName = "test.xml" ;
679
- mockFileSystem . File . WriteAllText ( fileName , ResxOpenTag + ResxCloseTag ) ;
680
- Assert . True ( CommandUtilities . IsLocalizable ( fileName , mockFileSystem ) ) ;
681
- }
682
-
683
- [ Fact ]
684
- public void MatchedFilesAreFiltered ( )
610
+ public void ResxFilesAreFiltered ( )
685
611
{
686
612
var mockFileSystem = new MockFileSystem ( ) ;
687
613
const string localizableFileName = "full.resx" ;
688
- mockFileSystem . File . WriteAllText ( localizableFileName , ResxOpenTag + ResxLocalizableData + ResxCloseTag ) ;
689
- mockFileSystem . File . WriteAllText ( "empty.resx" , ResxOpenTag + ResxCloseTag ) ;
614
+ mockFileSystem . File . WriteAllText ( localizableFileName ,
615
+ ResxFilterTests . ResxOpenTag + ResxFilterTests . ResxLocalizableData + ResxFilterTests . ResxCloseTag ) ;
616
+ mockFileSystem . File . WriteAllText ( "empty.resx" , ResxFilterTests . ResxOpenTag + ResxFilterTests . ResxCloseTag ) ;
690
617
var configJson = SetUpConfig ( "*.resx" ) ;
691
618
var fileParamsList = new List < AddFileParameters > ( ) ;
692
619
@@ -702,23 +629,50 @@ public void MatchedFilesAreFiltered()
702
629
Assert . Equal ( localizableFileName , fileParams . Files . Keys . First ( ) ) ;
703
630
}
704
631
705
- private const string ResxOpenTag = @"<?xml version=""1.0"" encoding=""utf-8""?><root>" ;
706
- private const string ResxLocalizableData = @"
707
- <data name=""$this.AccessibleName"" xml:space=""preserve"">
708
- <value>Date matcher</value>
709
- </data>" ;
710
- private const string ResxLocalizableWhitespace = @"
711
- <data name=""ksSingleSpace"" xml:space=""preserve"">
712
- <value> </value>
713
- </data>" ;
714
- private const string ResxNonLocalizableData = @"
715
- <data name="">>$this.Name"" xml:space=""preserve"">
716
- <value>SimpleDateMatchDlg</value>
717
- </data>" ;
718
- private const string ResxEmptyLocalizableData = @"
719
- <data name=""$this.Text"" xml:space=""preserve"">
720
- <value></value>
721
- </data>" ;
722
- private const string ResxCloseTag = "</root>" ;
632
+ [ Theory ]
633
+ [ InlineData ( "Add" ) ]
634
+ [ InlineData ( "Update" ) ]
635
+ public void XmlFilesAreFiltered ( string operation )
636
+ {
637
+ var mockFileSystem = new MockFileSystem ( ) ;
638
+ const string fileNameNotFiltered = "notFiltered.xml" ;
639
+ mockFileSystem . File . WriteAllText ( fileNameNotFiltered , XmlFilterTests . XmlOpenTag + XmlFilterTests . XmlCloseTag ) ;
640
+ const string fileNamePassesFilter = "filterPass.xml" ;
641
+ mockFileSystem . File . WriteAllText ( fileNamePassesFilter ,
642
+ XmlFilterTests . XmlOpenTag + XmlFilterTests . XmlGroupCorrect + XmlFilterTests . XmlCloseTag ) ;
643
+ mockFileSystem . File . WriteAllText ( "filterFail.xml" , XmlFilterTests . XmlOpenTag + XmlFilterTests . XmlCloseTag ) ;
644
+ dynamic configJson = SetUpConfig ( fileNameNotFiltered ) ;
645
+ dynamic file = new JObject ( ) ;
646
+ file . source = "filter*.xml" ;
647
+ file . translatable_elements = new JArray { XmlFilterTests . XpathToWrongAttribute , XmlFilterTests . XpathToTranslatableElements } ;
648
+ configJson . files . Add ( file ) ;
649
+ var fileParamsList = new List < FileParameters > ( ) ;
650
+
651
+ using ( var memStream = new MemoryStream ( Encoding . UTF8 . GetBytes ( configJson . ToString ( ) ) ) )
652
+ {
653
+ var config = new ConfigurationBuilder ( ) . AddNewtonsoftJsonStream ( memStream ) . Build ( ) ;
654
+ switch ( operation )
655
+ {
656
+ case "Add" :
657
+ var addFileParamsList = new List < AddFileParameters > ( ) ;
658
+ CommandUtilities . GetFilesFromConfiguration ( config , mockFileSystem , addFileParamsList , new SortedSet < string > ( ) ) ;
659
+ fileParamsList . AddRange ( addFileParamsList ) ;
660
+ break ;
661
+ case "Update" :
662
+ var updateFileParamsList = new List < UpdateFileParameters > ( ) ;
663
+ CommandUtilities . GetFilesFromConfiguration ( config , mockFileSystem , updateFileParamsList , new SortedSet < string > ( ) ) ;
664
+ fileParamsList . AddRange ( updateFileParamsList ) ;
665
+ break ;
666
+ }
667
+ }
668
+
669
+ Assert . Equal ( 2 , fileParamsList . Count ) ;
670
+ var fileParams = fileParamsList [ 0 ] ;
671
+ Assert . Single ( fileParams . Files ) ;
672
+ Assert . Equal ( fileNameNotFiltered , fileParams . Files . Keys . First ( ) ) ;
673
+ fileParams = fileParamsList [ 1 ] ;
674
+ Assert . Single ( fileParams . Files ) ;
675
+ Assert . Equal ( fileNamePassesFilter , fileParams . Files . Keys . First ( ) ) ;
676
+ }
723
677
}
724
678
}
0 commit comments