1+ using System . Text . Json ;
2+ using ByteSync . Common . Business . Misc ;
3+ using ByteSync . Services . Inventories ;
4+ using FluentAssertions ;
5+ using NUnit . Framework ;
6+
7+ namespace ByteSync . Client . UnitTests . Services . Inventories ;
8+
9+ public class NoiseFileDetectorTests
10+ {
11+ private static readonly string [ ] KnownNoiseFileNames = LoadNoiseFileNamesFromEmbeddedResource ( ) ;
12+
13+ [ TestCaseSource ( nameof ( KnownNoiseFileNames ) ) ]
14+ public void IsNoiseFileName_ShouldReturnTrue_ForKnownNoiseFiles_OnWindows ( string fileName )
15+ {
16+ var result = NoiseFileDetector . IsNoiseFileName ( fileName , OSPlatforms . Windows ) ;
17+
18+ result . Should ( ) . BeTrue ( ) ;
19+ }
20+
21+ [ TestCaseSource ( nameof ( KnownNoiseFileNames ) ) ]
22+ public void IsNoiseFileName_ShouldReturnTrue_ForKnownNoiseFiles_OnLinux ( string fileName )
23+ {
24+ var result = NoiseFileDetector . IsNoiseFileName ( fileName , OSPlatforms . Linux ) ;
25+
26+ result . Should ( ) . BeTrue ( ) ;
27+ }
28+
29+ [ TestCase ( "DESKTOP.INI" ) ]
30+ [ TestCase ( "THUMBS.DB" ) ]
31+ [ TestCase ( "EHTHUMBS.DB" ) ]
32+ [ TestCase ( "EHTHUMBS_VISTA.DB" ) ]
33+ [ TestCase ( ".ds_store" ) ]
34+ [ TestCase ( ".appledouble" ) ]
35+ [ TestCase ( ".lsoverride" ) ]
36+ [ TestCase ( ".spotlight-v100" ) ]
37+ [ TestCase ( ".trashes" ) ]
38+ [ TestCase ( ".FSEVENTSD" ) ]
39+ [ TestCase ( ".temporaryitems" ) ]
40+ [ TestCase ( ".volumeicon.icns" ) ]
41+ [ TestCase ( ".DIRECTORY" ) ]
42+ public void IsNoiseFileName_ShouldBeCaseInsensitive_OnNonLinuxPlatforms ( string fileName )
43+ {
44+ var windowsResult = NoiseFileDetector . IsNoiseFileName ( fileName , OSPlatforms . Windows ) ;
45+ var macResult = NoiseFileDetector . IsNoiseFileName ( fileName , OSPlatforms . MacOs ) ;
46+
47+ windowsResult . Should ( ) . BeTrue ( ) ;
48+ macResult . Should ( ) . BeTrue ( ) ;
49+ }
50+
51+ [ TestCase ( "DESKTOP.INI" ) ]
52+ [ TestCase ( "THUMBS.DB" ) ]
53+ [ TestCase ( "EHTHUMBS.DB" ) ]
54+ [ TestCase ( "EHTHUMBS_VISTA.DB" ) ]
55+ [ TestCase ( ".ds_store" ) ]
56+ [ TestCase ( ".appledouble" ) ]
57+ [ TestCase ( ".lsoverride" ) ]
58+ [ TestCase ( ".spotlight-v100" ) ]
59+ [ TestCase ( ".trashes" ) ]
60+ [ TestCase ( ".FSEVENTSD" ) ]
61+ [ TestCase ( ".temporaryitems" ) ]
62+ [ TestCase ( ".volumeicon.icns" ) ]
63+ [ TestCase ( ".DIRECTORY" ) ]
64+ public void IsNoiseFileName_ShouldBeCaseSensitive_OnLinux ( string fileName )
65+ {
66+ var result = NoiseFileDetector . IsNoiseFileName ( fileName , OSPlatforms . Linux ) ;
67+
68+ result . Should ( ) . BeFalse ( ) ;
69+ }
70+
71+ [ TestCase ( "readme.md" ) ]
72+ [ TestCase ( "normal.txt" ) ]
73+ [ TestCase ( ".gitignore" ) ]
74+ public void IsNoiseFileName_ShouldReturnFalse_ForUnknownFileNames ( string fileName )
75+ {
76+ var windowsResult = NoiseFileDetector . IsNoiseFileName ( fileName , OSPlatforms . Windows ) ;
77+ var linuxResult = NoiseFileDetector . IsNoiseFileName ( fileName , OSPlatforms . Linux ) ;
78+
79+ windowsResult . Should ( ) . BeFalse ( ) ;
80+ linuxResult . Should ( ) . BeFalse ( ) ;
81+ }
82+
83+ [ TestCase ( null ) ]
84+ [ TestCase ( "" ) ]
85+ [ TestCase ( " " ) ]
86+ public void IsNoiseFileName_ShouldReturnFalse_ForEmptyValues ( string ? fileName )
87+ {
88+ var windowsResult = NoiseFileDetector . IsNoiseFileName ( fileName , OSPlatforms . Windows ) ;
89+ var linuxResult = NoiseFileDetector . IsNoiseFileName ( fileName , OSPlatforms . Linux ) ;
90+
91+ windowsResult . Should ( ) . BeFalse ( ) ;
92+ linuxResult . Should ( ) . BeFalse ( ) ;
93+ }
94+
95+ private static string [ ] LoadNoiseFileNamesFromEmbeddedResource ( )
96+ {
97+ var assembly = typeof ( NoiseFileDetector ) . Assembly ;
98+ var resourceName = assembly . GetManifestResourceNames ( )
99+ . SingleOrDefault ( rn => rn . EndsWith ( ".Services.Inventories.noise-files.json" , StringComparison . Ordinal ) ) ;
100+
101+ resourceName . Should ( ) . NotBeNull ( ) ;
102+
103+ using var stream = assembly . GetManifestResourceStream ( resourceName ! ) ;
104+ stream . Should ( ) . NotBeNull ( ) ;
105+
106+ var data = JsonSerializer . Deserialize < string [ ] > ( stream ! ) ;
107+ data . Should ( ) . NotBeNull ( ) ;
108+
109+ return data ! ;
110+ }
111+ }
0 commit comments