// Sebastien Pouliot <sebastien@ximian.com>
//
// Copyright (C) 2005 Novell Inc. (http://www.novell.com)
+// Copyright 2011 Xamarin Inc (http://www.xamarin.com).
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
Assert.IsNotNull (isf.AssemblyIdentity, prefix + "AssemblyIdentity");
if ((isf.Scope & IsolatedStorageScope.Domain) != 0)
Assert.IsNotNull (isf.DomainIdentity, prefix + "DomainIdentity");
-#if NET_2_0
if ((isf.Scope & IsolatedStorageScope.Application) != 0)
Assert.IsNotNull (isf.ApplicationIdentity, prefix + "ApplicationIdentity");
-#endif
}
private void GetEnumerator (IsolatedStorageScope scope)
// giving more details is bad
GetEnumerator (IsolatedStorageScope.User | IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain | IsolatedStorageScope.Roaming);
}
-#if NET_2_0
[Test]
public void GetEnumerator_Machine ()
{
// we can't enum application
GetEnumerator (IsolatedStorageScope.Application);
}
-#endif
[Test]
public void GetUserStoreForAssembly ()
{
IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForAssembly ();
Assert.AreEqual (Int64.MaxValue, isf.MaximumSize, "MaximumSize");
Assert.AreEqual (IsolatedStorageScope.User | IsolatedStorageScope.Assembly, isf.Scope, "Scope");
+#if !NET_2_1
Assert.IsTrue ((isf.AssemblyIdentity is Url), "AssemblyIdentity");
// note: mono transforms the CodeBase into uppercase
// for net 1.1 which uses file:// and not file:///
string codebase = Assembly.GetExecutingAssembly ().CodeBase.ToUpper ().Substring (8);
Assert.IsTrue ((isf.AssemblyIdentity.ToString ().ToUpper ().IndexOf (codebase) > 0), "Url");
Assert.IsTrue ((isf.AssemblyIdentity.ToString ().ToUpper ().IndexOf (codebase) > 0), "Url");
+#endif
Assert.IsTrue ((isf.CurrentSize >= 0), "CurrentSize");
}
object o = isf.DomainIdentity;
}
-#if NET_2_0
[Test]
[ExpectedException (typeof (InvalidOperationException))]
public void GetUserStoreForAssembly_ApplicationIdentity ()
IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForAssembly ();
object o = isf.ApplicationIdentity;
}
-#endif
[Test]
public void GetUserStoreForDomain ()
IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForDomain ();
Assert.AreEqual (Int64.MaxValue, isf.MaximumSize, "MaximumSize");
Assert.AreEqual (IsolatedStorageScope.User | IsolatedStorageScope.Domain | IsolatedStorageScope.Assembly, isf.Scope, "Scope");
+#if !NET_2_1
Assert.IsTrue ((isf.AssemblyIdentity is Url), "AssemblyIdentity");
// note: mono transforms the CodeBase into uppercase
// for net 1.1 which uses file:// and not file:///
// so we're using the first parameter to GetCommandLineArgs
string exe = Environment.GetCommandLineArgs ()[0].Replace ("\\", "/").ToUpper ();
Assert.IsTrue ((isf.DomainIdentity.ToString ().ToUpper ().IndexOf (exe) > 0), exe + "\n" + isf.DomainIdentity.ToString ().ToUpper ()); //"Url - Domain");
+#endif
Assert.IsTrue ((isf.CurrentSize >= 0), "CurrentSize");
}
-#if NET_2_0
[Test]
[ExpectedException (typeof (InvalidOperationException))]
public void GetUserStoreForDomain_ApplicationIdentity ()
}
[Test]
+#if !MOBILE
[ExpectedException (typeof (IsolatedStorageException))]
+#endif
public void GetUserStoreForApplication_WithoutApplicationIdentity ()
{
// note: a manifest is required
}
[Test]
+#if !MOBILE
[ExpectedException (typeof (IsolatedStorageException))]
+#endif
public void GetUserStoreForApplication ()
{
IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication ();
Assert.AreEqual (Int64.MaxValue, isf.MaximumSize, "MaximumSize");
+#if !NET_2_1
Assert.AreEqual (IsolatedStorageScope.User | IsolatedStorageScope.Assembly, isf.Scope, "Scope");
Assert.IsTrue ((isf.AssemblyIdentity is Url), "AssemblyIdentity");
Assert.IsTrue ((isf.AssemblyIdentity.ToString ().IndexOf (Assembly.GetExecutingAssembly ().CodeBase) > 0), "Url");
+#endif
Assert.IsTrue ((isf.CurrentSize >= 0), "CurrentSize");
}
-
+
+#if !NET_2_1
[Test]
[ExpectedException (typeof (IsolatedStorageException))]
public void GetUserStoreForApplication_AssemblyIdentity ()
}
#endif
+ // This is supposed to be working only in SL.
+ [Test]
+ [ExpectedException (typeof (NotSupportedException))]
+ public void GetUserStoreForSite ()
+ {
+ IsolatedStorageFile.GetUserStoreForSite ();
+ }
+
[Test]
public void GetStore_Domain_Zone ()
{
IsolatedStorageScope scope = IsolatedStorageScope.User | IsolatedStorageScope.Domain | IsolatedStorageScope.Assembly;
IsolatedStorageFile isf = IsolatedStorageFile.GetStore (scope, typeof (Zone), typeof (Zone));
Assert.AreEqual (Int64.MaxValue, isf.MaximumSize, "MaximumSize");
+#if !NET_2_1
Assert.AreEqual (IsolatedStorageScope.User | IsolatedStorageScope.Domain | IsolatedStorageScope.Assembly, isf.Scope, "Scope");
Assert.IsTrue ((isf.AssemblyIdentity is Zone), "AssemblyIdentity");
Assert.IsTrue ((isf.AssemblyIdentity.ToString ().IndexOf ("MyComputer") > 0), "Zone - Assembly");
Assert.IsTrue ((isf.DomainIdentity is Zone), "DomainIdentity");
Assert.IsTrue ((isf.DomainIdentity.ToString ().IndexOf ("MyComputer") > 0), "Zone - Domain");
+#endif
Assert.IsTrue ((isf.CurrentSize >= 0), "CurrentSize");
}
[Test]
+#if !MOBILE
[ExpectedException (typeof (IsolatedStorageException))]
+#endif
public void GetStore_Domain_NonPresentEvidences ()
{
IsolatedStorageScope scope = IsolatedStorageScope.User | IsolatedStorageScope.Domain | IsolatedStorageScope.Assembly;
IsolatedStorageFile isf = IsolatedStorageFile.GetStore (scope, typeof (StrongName), typeof (Url));
Assert.AreEqual (Int64.MaxValue, isf.MaximumSize, "MaximumSize");
Assert.AreEqual (scope, isf.Scope, "Scope");
+#if !NET_2_1
Assert.IsTrue ((isf.AssemblyIdentity is Url), "AssemblyIdentity");
// note: mono transforms the CodeBase into uppercase
// for net 1.1 which uses file:// and not file:///
string codebase = Assembly.GetExecutingAssembly ().CodeBase.ToUpper ().Substring (8);
Assert.IsTrue ((isf.AssemblyIdentity.ToString ().ToUpper ().IndexOf (codebase) > 0), "Url");
// DomainIdentity throws a InvalidOperationException
+#endif
Assert.IsTrue ((isf.CurrentSize >= 0), "CurrentSize");
}
+#if !MOBILE
[Test]
[ExpectedException (typeof (ArgumentNullException))]
public void GetStore_Domain_DomainNullObject ()
Assert.IsTrue ((isf.DomainIdentity.ToString ().IndexOf ("Internet") > 0), "Zone - Domain");
Assert.IsTrue ((isf.CurrentSize >= 0), "CurrentSize");
}
-#if NET_2_0
+#endif
+
[Test]
[ExpectedException (typeof (ArgumentNullException))]
public void GetStore_Application_NullObject ()
}
[Test]
+#if !MOBILE
[ExpectedException (typeof (IsolatedStorageException))]
+#endif
public void GetStore_Application_NullType ()
{
IsolatedStorageScope scope = IsolatedStorageScope.User | IsolatedStorageScope.Application;
IsolatedStorageFile isf = IsolatedStorageFile.GetStore (scope, (Type)null);
// again it's the lack of a manifest
}
-#endif
+#if !MOBILE
[Test]
public void GetStore_DomainScope_Evidences ()
{
// Maximum size for Internet isn't (by default) Int64.MaxValue
Assert.AreEqual (scope, isf.Scope, "Scope");
+#if !NET_2_1
Assert.IsTrue ((isf.AssemblyIdentity is Zone), "AssemblyIdentity");
Assert.IsTrue ((isf.AssemblyIdentity.ToString ().IndexOf ("Intranet") > 0), "Zone - Assembly");
Assert.IsTrue ((isf.DomainIdentity is Zone), "DomainIdentity");
Assert.IsTrue ((isf.DomainIdentity.ToString ().IndexOf ("Internet") > 0), isf.DomainIdentity.ToString ()); //"Zone - Domain");
+#endif
Assert.IsTrue ((isf.CurrentSize >= 0), "CurrentSize");
}
ae.AddHost (new Zone (SecurityZone.Internet));
IsolatedStorageFile isf = IsolatedStorageFile.GetStore (scope, null, null, ae, typeof (Zone));
}
+#endif
[Test]
public void RegressionBNC354539 ()
try {
isf.CreateDirectory (path);
}
-#if NET_4_0
catch (IsolatedStorageException ex) {
Assert.IsFalse (ex.Message.IndexOf (path) >= 0, "Message");
Assert.IsNull (ex.InnerException, "InnerException");
}
-#else
- catch (IOException ex) {
- Assert.AreEqual (typeof (IOException), ex.GetType (), "Type");
- // don't leak path information
- Assert.IsFalse (ex.Message.IndexOf (path) >= 0, "Message");
- Assert.IsNull (ex.InnerException, "InnerException");
- }
-#endif
}
}
}
[Test]
-#if NET_4_0
[ExpectedException (typeof (ArgumentException))]
-#else
- [ExpectedException (typeof (SecurityException))]
-#endif
public void GetFilesInSubdirs ()
{
IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForAssembly ();
}
-#if NET_4_0
[Test]
[ExpectedException (typeof (ArgumentException))]
public void GetDirsInSubDirs ()
isf.CreateDirectory ("subdir");
string [] dir_names = isf.GetDirectoryNames ("subdir/../*");
}
-#endif
[Test] // https://bugzilla.novell.com/show_bug.cgi?id=376188
public void CreateSubDirectory ()
isf.DeleteDirectory ("subdir");
}
+ [Test]
+ public void DeleteFile ()
+ {
+ IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForAssembly ();
+
+ try {
+ isf.DeleteFile (null);
+ Assert.Fail ("#Exc0");
+ } catch (ArgumentNullException) {
+ }
+
+ // We are getting an internal IndexOutOfRangeException in 2.0
+ // Not sure we want to mimic that one.
+ try {
+ isf.DeleteFile (String.Empty);
+ Assert.Fail ("#Exc1");
+ } catch (IsolatedStorageException) {
+ }
+
+ try {
+ isf.DeleteFile ("idontexist");
+ Assert.Fail ("#Exc2");
+ } catch (IsolatedStorageException) {
+ }
+
+ try {
+ isf.DeleteFile ("../../file");
+ Assert.Fail ("#Exc3");
+ } catch (IsolatedStorageException) {
+ }
+
+ try {
+ isf.DeleteFile ("subdir/file");
+ Assert.Fail ("#Exc4");
+ } catch (IsolatedStorageException) {
+ }
+
+ isf.CreateDirectory ("subdir");
+ try {
+ isf.DeleteFile ("subdir");
+ Assert.Fail ("#Exc5");
+ } catch (IsolatedStorageException) {
+ }
+ }
+
[Test]
public void GetStore_NullTypes ()
{
IsolatedStorageScope scope = IsolatedStorageScope.User | IsolatedStorageScope.Roaming | IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain;
IsolatedStorageFile isf = IsolatedStorageFile.GetStore (scope, null, null);
+#if !NET_2_1
Assert.AreEqual (typeof (Url), isf.AssemblyIdentity.GetType (), "AssemblyIdentity");
Assert.AreEqual (typeof (Url), isf.DomainIdentity.GetType (), "DomainIdentity");
+#endif
+ }
+
+ [Test]
+ public void RemoveFromOtherInstance ()
+ {
+ IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForAssembly ();
+ IsolatedStorageFile isf2 = IsolatedStorageFile.GetUserStoreForAssembly ();
+
+ isf.Remove ();
+ try {
+ isf2.Remove ();
+ Assert.Fail ("#Exc1");
+ } catch (IsolatedStorageException) {
+ }
}
-#if NET_4_0
[Test]
public void Remove ()
{
isf.MoveFile (" ", "file-new-new");
Assert.Fail ("#Exc2");
} catch (ArgumentException e) {
- Console.WriteLine (e);
}
try {
isf.Close ();
isf.Dispose ();
}
-#endif
+
+ [Test]
+ public void MultiLevel ()
+ {
+ // see bug #4101
+ IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForAssembly ();
+ try {
+ isf.CreateDirectory ("dir1");
+ string [] dirs = isf.GetDirectoryNames ("*");
+ Assert.AreEqual (dirs.Length, 1, "1a");
+ Assert.AreEqual (dirs [0], "dir1", "1b");
+
+ isf.CreateDirectory ("dir1/test");
+ dirs = isf.GetDirectoryNames ("dir1/*");
+ Assert.AreEqual (dirs.Length, 1, "2a");
+ Assert.AreEqual (dirs [0], "test", "2b");
+
+ isf.CreateDirectory ("dir1/test/test2a");
+ isf.CreateDirectory ("dir1/test/test2b");
+ dirs = isf.GetDirectoryNames ("dir1/test/*");
+ Assert.AreEqual (dirs.Length, 2, "3a");
+ Assert.AreEqual (dirs [0], "test2a", "3b");
+ Assert.AreEqual (dirs [1], "test2b", "3c");
+ }
+ finally {
+ isf.DeleteDirectory ("dir1/test/test2a");
+ isf.DeleteDirectory ("dir1/test/test2b");
+ isf.DeleteDirectory ("dir1/test");
+ isf.DeleteDirectory ("dir1");
+ }
+ }
+ [Test]
+ public void RootedDirectory ()
+ {
+ IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForAssembly ();
+ try {
+ isf.CreateDirectory ("test/nested/directory/structure/without/root");
+ isf.CreateDirectory ("/test/nested/directory/structure/with/root");
+ }
+ finally {
+ isf.DeleteDirectory ("test/nested/directory/structure/without/root");
+ isf.DeleteDirectory ("test/nested/directory/structure/without");
+
+ isf.DeleteDirectory ("/test/nested/directory/structure/with/root");
+ isf.DeleteDirectory ("/test/nested/directory/structure/with");
+ isf.DeleteDirectory ("/test/nested/directory/structure");
+ isf.DeleteDirectory ("/test/nested/directory");
+ isf.DeleteDirectory ("/test/nested");
+ isf.DeleteDirectory ("/test");
+ }
+ }
}
}