| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- //
- // UniqueIdTest.cs
- //
- // Author:
- // Atsushi Enomoto <[email protected]>
- // Jonathan Pryor <[email protected]>
- //
- // Copyright (C) 2006, 2009 Novell, Inc. http://www.novell.com
- //
- // Permission is hereby granted, free of charge, to any person obtaining
- // a copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to
- // permit persons to whom the Software is furnished to do so, subject to
- // the following conditions:
- //
- // The above copyright notice and this permission notice shall be
- // included in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- //
- using System;
- using System.Linq;
- using System.Text;
- using System.Xml;
- using NUnit.Framework;
- namespace MonoTests.System.Xml
- {
- [TestFixture]
- public class UniqueIdTest
- {
- [Test]
- public void TestDefault ()
- {
- UniqueId id = new UniqueId ();
- Assert.IsTrue (id.IsGuid, "#1");
- Guid g = Guid.NewGuid ();
- UniqueId a = new UniqueId (g);
- UniqueId b = new UniqueId (g.ToByteArray ());
- Assert.AreEqual (a, b, "#2");
- Assert.AreEqual ("urn:uuid:", a.ToString ().Substring (0, 9), "#3");
- a = new UniqueId ("foo");
- Assert.AreEqual ("foo", a.ToString (), "#4");
- }
- [Test]
- [ExpectedException (typeof (FormatException))]
- public void ZeroLengthCtor ()
- {
- new UniqueId ("");
- }
- [Test]
- [ExpectedException (typeof (ArgumentNullException))]
- public void CtorNull1 ()
- {
- new UniqueId ((string) null);
- }
- [Test, ExpectedException (typeof (ArgumentNullException))]
- public void Ctor_IdNull ()
- {
- new UniqueId (null, 0);
- }
- [Test, ExpectedException (typeof (ArgumentOutOfRangeException))]
- public void Ctor_OffsetNegative ()
- {
- new UniqueId (new byte[0], -1);
- }
- [Test, ExpectedException (typeof (ArgumentException))]
- public void Ctor_OffsetTooLarge ()
- {
- new UniqueId (new byte[16], 16);
- }
- [Test, ExpectedException (typeof (ArgumentException))]
- public void Ctor_BufferTooSmall ()
- {
- new UniqueId (new byte[15], 0);
- }
- [Test]
- public void Ctor_Id ()
- {
- byte[] buf = Encoding.UTF8.GetBytes ("Hello!")
- .Concat (new Guid ().ToByteArray ()).ToArray ();
- var g = new UniqueId (buf, "Hello!".Length);
- Assert.AreEqual (new UniqueId (new Guid ()), g);
- }
- [Test, ExpectedException (typeof (ArgumentNullException))]
- public void Ctor_CharsNull ()
- {
- new UniqueId (null, 0, 1);
- }
- [Test, ExpectedException (typeof (ArgumentOutOfRangeException))]
- public void Ctor_Chars_OffsetNegative ()
- {
- new UniqueId (new char[2], -1, 1);
- }
- [Test, ExpectedException (typeof (ArgumentOutOfRangeException))]
- public void Ctor_Chars_OffsetTooLarge ()
- {
- new UniqueId (new char[2], 2, 1);
- }
- [Test, ExpectedException (typeof (ArgumentOutOfRangeException))]
- public void Ctor_Chars_CountNegative ()
- {
- new UniqueId (new char[2], 0, -1);
- }
- [Test, ExpectedException (typeof (ArgumentOutOfRangeException))]
- public void Ctor_Chars_CountTooLarge ()
- {
- new UniqueId (new char[2], 1, 2);
- }
- [Test, ExpectedException (typeof (FormatException))]
- public void Ctor_Chars_CountZero ()
- {
- new UniqueId (new char[2], 0, 0);
- }
- [Test]
- public void Ctor_Chars ()
- {
- var a = new UniqueId ("Hello!".ToCharArray (), 0, 5);
- Assert.IsFalse (a.IsGuid);
- Assert.AreEqual ("Hello", a.ToString ());
- a = new UniqueId ();
- var b = new UniqueId (a.ToString ().ToCharArray (), 0, 45);
- Assert.IsTrue (b.IsGuid);
- Assert.AreEqual (a, b);
- string s = "foo" + a.ToString () + "bar";
- b = new UniqueId (s.ToCharArray (), 3, s.Length-6);
- Assert.IsTrue (b.IsGuid);
- Assert.AreEqual (a, b);
- a = new UniqueId (new Guid ());
- b = new UniqueId (a.ToString ().ToCharArray (), 0, 45);
- Assert.IsFalse (b.IsGuid);
- Assert.AreEqual (a, b);
- }
- [Test]
- public void CharArrayLength ()
- {
- var u = new UniqueId ("string");
- Assert.AreEqual (6, u.CharArrayLength);
- Assert.AreEqual (u.ToString().Length, u.CharArrayLength);
- u = new UniqueId (new Guid());
- Assert.AreEqual (45, u.CharArrayLength);
- Assert.AreEqual (u.ToString().Length, u.CharArrayLength);
- }
- [Test]
- public void Equals ()
- {
- var a = new UniqueId ("a");
- var b = new UniqueId (new Guid ());
- Assert.IsFalse (a.Equals (null));
- Assert.IsFalse (b.Equals (null));
- Assert.IsFalse (a.Equals (b));
- Assert.IsFalse (a == b);
- Assert.IsTrue (a != b);
- var c = new UniqueId ("a");
- Assert.IsTrue (a.Equals (c));
- Assert.IsTrue (a == c);
- }
- [Test]
- public new void GetHashCode ()
- {
- Assert.AreEqual ("a".GetHashCode (), new UniqueId ("a").GetHashCode ());
- // TODO: What does .NET do for UniqueId.GetHashCode() when UniqueId.IsGuid==true?
- // Assert.AreEqual (new Guid ().GetHashCode (), new UniqueId (new Guid ()).GetHashCode ());
- }
- [Test]
- public void IsGuid ()
- {
- var a = new UniqueId ("string");
- Assert.IsFalse (a.IsGuid);
- a = new UniqueId ();
- Assert.IsTrue (a.IsGuid);
- a = new UniqueId (new Guid ());
- Assert.IsFalse (a.IsGuid);
- }
- [Test, ExpectedException (typeof (ArgumentNullException))]
- public void ToCharArray_CharsNull ()
- {
- new UniqueId ("s").ToCharArray (null, 0);
- }
- [Test, ExpectedException (typeof (ArgumentOutOfRangeException))]
- public void ToCharArray_CharsTooSmall ()
- {
- new UniqueId ().ToCharArray (new char[15], 0);
- }
- [Test, ExpectedException (typeof (ArgumentOutOfRangeException))]
- public void ToCharArray_OffsetNegative ()
- {
- new UniqueId ("s").ToCharArray (new char[1], -1);
- }
- [Test, ExpectedException (typeof (ArgumentOutOfRangeException))]
- public void ToCharArray_OffsetOutOfRange ()
- {
- new UniqueId ("s").ToCharArray (new char[1], 2);
- }
- [Test]
- public void ToCharArray ()
- {
- char[] chars = new char[4];
- Assert.AreEqual (4, new UniqueId ("data").ToCharArray (chars, 0));
- Assert.AreEqual ("data".ToCharArray (), chars);
- chars = new char[45];
- Assert.AreEqual (45, new UniqueId (new Guid ()).ToCharArray (chars, 0));
- Assert.AreEqual (("urn:uuid:" + new Guid ().ToString ()).ToCharArray (), chars);
- }
- [Test]
- public new void ToString ()
- {
- Assert.AreEqual ("string", new UniqueId ("string").ToString ());
- Assert.AreEqual (
- "urn:uuid:00000000-0000-0000-0000-000000000000",
- new UniqueId (new Guid ()).ToString ());
- Guid g = Guid.NewGuid ();
- Assert.AreEqual ("urn:uuid:" + g.ToString (), new UniqueId (g).ToString ());
- }
- [Test, ExpectedException (typeof (ArgumentNullException))]
- public void TryGetGuid_BufferNull ()
- {
- new UniqueId ().TryGetGuid (null, 0);
- }
- [Test, ExpectedException (typeof (ArgumentOutOfRangeException))]
- public void TryGetGuid_BufferTooSmall ()
- {
- new UniqueId ().TryGetGuid (new byte[16], 1);
- }
- [Test, ExpectedException (typeof (ArgumentOutOfRangeException))]
- public void TryGetGuid_OffsetNegative ()
- {
- new UniqueId ().TryGetGuid (new byte[16], -1);
- }
- [Test, ExpectedException (typeof (ArgumentOutOfRangeException))]
- public void TryGetGuid_OffsetTooLarge ()
- {
- new UniqueId ().TryGetGuid (new byte[16], 16);
- }
- [Test]
- public void TryGetGuid ()
- {
- Guid g;
- Assert.IsFalse (new UniqueId ("string").TryGetGuid (out g));
- Assert.IsFalse (new UniqueId ("string").TryGetGuid (new byte [16], 0));
- Assert.IsFalse (new UniqueId (new Guid ()).TryGetGuid (out g));
- Assert.IsFalse (new UniqueId (new Guid ()).TryGetGuid (new byte [16], 0));
- g = Guid.NewGuid ();
- Guid g2;
- byte[] bg;
- Assert.IsTrue (new UniqueId (g).TryGetGuid (out g2));
- Assert.AreEqual (g, g2);
- Assert.IsTrue (new UniqueId (g).TryGetGuid (bg = new byte [17], 1));
- Assert.AreEqual (g, new Guid (bg.Skip (1).ToArray ()));
- }
- }
- }
|