2 // ResXFileRefTest.cs: Unit Tests for ResXFileRef.
5 // Gert Driesen <drieseng@users.sourceforge.net>
9 using System.ComponentModel;
12 using System.Resources;
15 using NUnit.Framework;
17 namespace MonoTests.System.Resources
20 public class ResXFileRefTest : MonoTests.System.Windows.Forms.TestHelper
23 public void Constructor1 ()
25 ResXFileRef r = new ResXFileRef ("mono.bmp", "Bitmap");
26 MonoTests.System.Windows.Forms.TestHelper.RemoveWarning (r);
27 Assert.AreEqual ("mono.bmp", r.FileName, "#1");
28 Assert.AreEqual ("Bitmap", r.TypeName, "#2");
32 public void Constructor1_FileName_Null ()
35 new ResXFileRef ((string) null, "Bitmap");
37 } catch (ArgumentNullException ex) {
38 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
39 Assert.IsNotNull (ex.Message, "#3");
40 Assert.IsNotNull (ex.ParamName, "#4");
41 Assert.AreEqual ("fileName", ex.ParamName, "#5");
42 Assert.IsNull (ex.InnerException, "#6");
47 public void Constructor1_TypeName_Null ()
50 new ResXFileRef ("mono.bmp", (string) null);
52 } catch (ArgumentNullException ex) {
53 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
54 Assert.IsNotNull (ex.Message, "#3");
55 Assert.IsNotNull (ex.ParamName, "#4");
56 Assert.AreEqual ("typeName", ex.ParamName, "#5");
57 Assert.IsNull (ex.InnerException, "#6");
62 public void Constructor2 ()
64 Encoding utf8 = Encoding.UTF8;
66 ResXFileRef r = new ResXFileRef ("mono.bmp", "Bitmap", utf8);
67 Assert.AreEqual ("mono.bmp", r.FileName, "#A1");
68 Assert.AreSame (utf8, r.TextFileEncoding, "#A2");
69 Assert.AreEqual ("Bitmap", r.TypeName, "#A3");
71 r = new ResXFileRef ("mono.bmp", "Bitmap", (Encoding) null);
72 Assert.AreEqual ("mono.bmp", r.FileName, "#B1");
73 Assert.IsNull (r.TextFileEncoding, "#B2");
74 Assert.AreEqual ("Bitmap", r.TypeName, "#B3");
78 public void Constructor2_FileName_Null ()
81 new ResXFileRef ((string) null, "Bitmap", Encoding.UTF8);
83 } catch (ArgumentNullException ex) {
84 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
85 Assert.IsNotNull (ex.Message, "#3");
86 Assert.IsNotNull (ex.ParamName, "#4");
87 Assert.AreEqual ("fileName", ex.ParamName, "#5");
88 Assert.IsNull (ex.InnerException, "#6");
93 public void Constructor2_TypeName_Null ()
96 new ResXFileRef ("mono.bmp", (string) null, Encoding.UTF8);
98 } catch (ArgumentNullException ex) {
99 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
100 Assert.IsNotNull (ex.Message, "#3");
101 Assert.IsNotNull (ex.ParamName, "#4");
102 Assert.AreEqual ("typeName", ex.ParamName, "#5");
103 Assert.IsNull (ex.InnerException, "#6");
108 public void ToStringTest ()
110 ResXFileRef r = new ResXFileRef ("mono.bmp", "Bitmap");
111 Assert.AreEqual ("mono.bmp;Bitmap", r.ToString (), "#1");
113 r = new ResXFileRef ("mono.bmp", "Bitmap", Encoding.UTF8);
114 Assert.AreEqual ("mono.bmp;Bitmap;utf-8", r.ToString (), "#2");
116 r = new ResXFileRef ("mono.bmp", "Bitmap", (Encoding) null);
117 Assert.AreEqual ("mono.bmp;Bitmap", r.ToString (), "#3");
122 public class ResXFileRefConverterTest : MonoTests.System.Windows.Forms.TestHelper
125 protected override void SetUp () {
126 _converter = new ResXFileRef.Converter ();
127 _tempDirectory = Path.Combine (Path.GetTempPath (), "ResXResourceReaderTest");
128 if (!Directory.Exists (_tempDirectory)) {
129 Directory.CreateDirectory (_tempDirectory);
131 _tempFileUTF7 = Path.Combine (_tempDirectory, "string_utf7.txt");
132 using (StreamWriter sw = new StreamWriter (_tempFileUTF7, false, Encoding.UTF7)) {
133 sw.Write ("\u0021\u0026\u002A\u003B");
139 protected override void TearDown ()
141 if (Directory.Exists (_tempDirectory))
142 Directory.Delete (_tempDirectory, true);
147 public void CanConvertFrom ()
149 Assert.IsTrue (_converter.CanConvertFrom (typeof (string)), "#1");
150 Assert.IsFalse (_converter.CanConvertFrom (typeof (byte [])), "#2");
154 public void CanConvertTo ()
156 Assert.IsTrue (_converter.CanConvertTo (typeof (string)), "#1");
157 Assert.IsFalse (_converter.CanConvertTo (typeof (MemoryStream)), "#2");
158 Assert.IsFalse (_converter.CanConvertTo (typeof (Bitmap)), "#3");
162 public void ConvertFrom_File_DoesNotExist ()
164 // file does not exist
165 string fileRef = "doesnotexist.txt;" + typeof (string).AssemblyQualifiedName;
167 _converter.ConvertFrom (fileRef);
169 } catch (FileNotFoundException ex) {
170 Assert.AreEqual (typeof (FileNotFoundException), ex.GetType (), "#A2");
171 Assert.IsNull (ex.InnerException, "#A3");
172 Assert.IsNotNull (ex.FileName, "#A4");
173 Assert.AreEqual (Path.Combine (Directory.GetCurrentDirectory (), "doesnotexist.txt"), ex.FileName, "#A5");
174 Assert.IsNotNull (ex.Message, "#A6");
179 public void ConvertFrom_Type_NotSet ()
181 string fileRef = "doesnotexist.txt";
183 _converter.ConvertFrom (fileRef);
185 } catch (ArgumentException ex) {
186 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
187 Assert.IsNull (ex.InnerException, "#B3");
188 Assert.IsNotNull (ex.Message, "#B4");
189 Assert.AreEqual ("value", ex.Message, "#B5");
190 Assert.IsNull (ex.ParamName, "#B6");
195 public void ConvertFrom_NotString ()
197 Assert.IsNull (_converter.ConvertFrom (null), "#G1");
198 Assert.IsNull (_converter.ConvertFrom (1), "#G2");
199 Assert.IsNull (_converter.ConvertFrom (true), "#G3");
203 public void ConvertFrom_Type_String ()
205 // read UTF-7 content without setting encoding
206 string fileRef = _tempFileUTF7 + ";" + typeof (string).AssemblyQualifiedName;
207 string result = _converter.ConvertFrom (fileRef) as string;
208 Assert.IsNotNull (result, "#A1");
209 Assert.IsFalse (result == "\u0021\u0026\u002A\u003B", "#A2");
211 // read UTF-7 content using UTF-7 encoding
212 fileRef = _tempFileUTF7 + ";" + typeof (string).AssemblyQualifiedName + ";utf-7";
213 result = _converter.ConvertFrom (fileRef) as string;
214 Assert.IsNotNull (result, "#B1");
215 Assert.AreEqual ("\u0021\u0026\u002A\u003B", result, "#B2");
218 fileRef = _tempFileUTF7 + ";" + typeof (string).AssemblyQualifiedName + ";utf-99";
220 _converter.ConvertFrom (fileRef);
222 } catch (ArgumentException ex) {
223 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");
224 Assert.IsNull (ex.InnerException, "#D3");
225 Assert.IsNotNull (ex.Message, "#D4");
226 Assert.IsTrue (ex.Message.IndexOf ("'utf-99'") != -1, "#D5");
227 Assert.IsNotNull (ex.ParamName, "#D6");
228 Assert.AreEqual ("name", ex.ParamName, "#D7");
233 [Category ("NotWorking")]
234 public void ConvertFrom_Type_String_FilePathWithBackslashes ()
236 if (Path.DirectorySeparatorChar == '\\')
240 string fileContents = "foobar";
241 string fileName = "foo.txt";
242 string filePath = Path.Combine (_tempDirectory, fileName);
243 File.WriteAllText (filePath, fileContents);
245 filePath = _tempDirectory + "\\.\\" + fileName;
247 string fileRef = filePath + ";" + typeof (string).AssemblyQualifiedName;
248 string result = _converter.ConvertFrom (fileRef) as string;
249 Assert.IsNotNull (result, "#A1");
250 Assert.AreEqual (result, fileContents, "#A2");
254 public void ConvertFrom_Type_StreamReader ()
256 // read UTF-7 content without setting encoding
257 string fileRef = _tempFileUTF7 + ";" + typeof (StreamReader).AssemblyQualifiedName;
258 using (StreamReader sr = (StreamReader) _converter.ConvertFrom (fileRef)) {
259 string result = sr.ReadToEnd ();
260 Assert.IsTrue (result.Length > 0, "#D1");
261 Assert.IsFalse (result == "\u0021\u0026\u002A\u003B", "#D2");
264 // UTF-7 encoding is set, but not used
265 fileRef = _tempFileUTF7 + ";" + typeof (StreamReader).AssemblyQualifiedName + ";utf-7";
266 using (StreamReader sr = (StreamReader) _converter.ConvertFrom (fileRef)) {
267 string result = sr.ReadToEnd ();
268 Assert.IsTrue (result.Length > 0, "#F1");
269 Assert.IsFalse (result == "\u0021\u0026\u002A\u003B", "#F2");
272 // invalid encoding is set, no error
273 fileRef = _tempFileUTF7 + ";" + typeof (StreamReader).AssemblyQualifiedName + ";utf-99";
274 using (StreamReader sr = (StreamReader) _converter.ConvertFrom (fileRef)) {
275 string result = sr.ReadToEnd ();
276 Assert.IsTrue (result.Length > 0, "#A1");
277 Assert.IsFalse (result == "\u0021\u0026\u002A\u003B", "#A2");
282 public void ConvertFrom_Type_MemoryStream ()
284 string fileRef = _tempFileUTF7 + ";" + typeof (MemoryStream).AssemblyQualifiedName;
285 using (MemoryStream ms = (MemoryStream) _converter.ConvertFrom (fileRef)) {
286 Assert.IsTrue (ms.Length > 0);
291 public void ConvertTo ()
293 ResXFileRef r = new ResXFileRef ("mono.bmp", "Bitmap");
294 Assert.AreEqual ("mono.bmp;Bitmap", (string) _converter.ConvertTo (
295 r, typeof (string)), "#1");
297 r = new ResXFileRef ("mono.bmp", "Bitmap", Encoding.UTF8);
298 Assert.AreEqual ("mono.bmp;Bitmap;utf-8", (string) _converter.ConvertTo (
299 r, typeof (string)), "#2");
301 r = new ResXFileRef ("mono.bmp", "Bitmap", (Encoding) null);
302 Assert.AreEqual ("mono.bmp;Bitmap", (string) _converter.ConvertTo (
303 r, typeof (string)), "#3");
306 private TypeConverter _converter;
307 private string _tempDirectory;
308 private string _tempFileUTF7;