From: Michael D. <mik...@us...> - 2004-07-31 19:19:19
|
Update of /cvsroot/nhibernate/nhibernate/src/NHibernate.Test In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8880/NHibernate.Test Modified Files: FumTest.cs Log Message: Implemented more tests. Index: FumTest.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate.Test/FumTest.cs,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** FumTest.cs 28 Jul 2004 03:29:21 -0000 1.9 --- FumTest.cs 31 Jul 2004 19:19:10 -0000 1.10 *************** *** 193,217 **** [Test] ! [Ignore("Test not yet written")] public void CompositeIDQuery() { } [Test] - [Ignore("Test not yet written")] public void CompositeIDCollections() { } [Test] - [Ignore("Test not yet written")] public void DeleteOwner() { } [Test] - [Ignore("Test not yet written")] public void CompositeIDs() { } --- 193,406 ---- [Test] ! [Ignore("ISession.Filter() not implemented. Everything else passes.")] public void CompositeIDQuery() { + ISession s = sessions.OpenSession(); + Fum fee = new Fum( FumTest.FumKey("fee", true) ); + fee.FumString = "fee"; + s.Save(fee); + Fum fi = new Fum( FumTest.FumKey("fi", true) ); + fi.FumString = "fi"; + short fiShort = fi.Id.Short; + s.Save(fi); + Fum fo = new Fum( FumTest.FumKey("fo", true) ); + fo.FumString = "fo"; + s.Save(fo); + Fum fum = new Fum( FumTest.FumKey("fum", true) ); + fum.FumString = "fum"; + s.Save(fum); + s.Flush(); + s.Close(); + + s = sessions.OpenSession(); + // Try to find the Fum object "fo" that we inserted searching by the string in the id + IList vList = s.Find("from fum in class NHibernate.DomainModel.Fum where fum.Id.String='fo'"); + Assert.AreEqual( 1, vList.Count, "find by composite key query (find fo object)" ); + fum = (Fum)vList[0]; + Assert.AreEqual( "fo", fum.Id.String, "find by composite key query (check fo object)" ); + + // Try to fnd the Fum object "fi" that we inserted by searching the date in the id + vList = s.Find("from fum in class NHibernate.DomainModel.Fum where fum.Id.Short = ?", fiShort, NHibernate.Int16 ); + Assert.AreEqual( 1, vList.Count, "find by composite key query (find fi object)" ); + fi = (Fum)vList[0]; + Assert.AreEqual( "fi", fi.Id.String, "find by composite key query (check fi object)" ); + + // make sure we can return all of the objects by searching by the date id + vList = s.Find("from fum in class NHibernate.DomainModel.Fum where fum.Id.Date <= ? and not fum.FumString='FRIEND'", DateTime.Now, NHibernate.Date); + Assert.AreEqual( 4, vList.Count, "find by composite key query with arguments" ); + s.Flush(); + s.Close(); + + s = sessions.OpenSession(); + Assert.IsTrue( s.Enumerable("select fum.Id.Short, fum.Id.Date, fum.Id.String from fum in class NHibernate.DomainModel.Fum").GetEnumerator().MoveNext() ); + Assert.IsTrue( s.Enumerable("select fum.Id from fum in class NHibernate.DomainModel.Fum").GetEnumerator().MoveNext() ); + + IQuery qu = s.CreateQuery("select fum.FumString, fum, fum.FumString, fum.Id.Date from fum in class NHibernate.DomainModel.Fum"); + Type.IType[] types = qu.ReturnTypes; + Assert.AreEqual( 4, types.Length ); + for( int k=0; k<types.Length; k++) + { + Assert.IsNotNull( types[k] ); + } + Assert.IsTrue( types[0] is Type.StringType ); + Assert.IsTrue( types[1] is Type.EntityType ); + Assert.IsTrue( types[2] is Type.StringType ); + Assert.IsTrue( types[3] is Type.DateTimeType ); + IEnumerator enumer = qu.Enumerable().GetEnumerator(); + int j = 0; + while( enumer.MoveNext() ) + { + j++; + Assert.IsTrue( ((object[])enumer.Current)[1] is Fum ); + } + Assert.AreEqual( 8, j, "iterate on composite key" ); + + //TODO: testing code for Filter() here + + enumer = s.Enumerable("from fum in class NHibernate.DomainModel.Fum where not fum.FumString='FRIEND'").GetEnumerator(); + int i = 0; + while( enumer.MoveNext() ) + { + fum = (Fum)enumer.Current; + s.Delete(fum); + i++; + } + Assert.AreEqual( 4, i, "iterate on composite key" ); + s.Flush(); + + s.Enumerable("from fu in class Fum, fo in class Fum where fu.Fo.Id.String = fo.Id.String and fo.FumString is not null"); + s.Find("from Fumm f1 inner join f1.Fum f2"); + s.Close(); } [Test] public void CompositeIDCollections() { + ISession s = sessions.OpenSession(); + Fum fum1 = new Fum( FumTest.FumKey("fum1") ); + Fum fum2 = new Fum( FumTest.FumKey("fum2") ); + fum1.FumString = "fee fo fi"; + fum2.FumString = "fee fo fi"; + s.Save(fum1); + s.Save(fum2); + Qux q = new Qux(); + s.Save(q); + IDictionary dict = new Hashtable(); + IList list = new ArrayList(); + dict.Add(fum1, new object() ); + dict.Add(fum2, new object() ); + list.Add(fum1); + q.Fums = dict; + q.MoreFums = list; + fum1.QuxArray = new Qux[] {q}; + s.Flush(); + s.Close(); + + s = sessions.OpenSession(); + q = (Qux)s.Load( typeof(Qux), q.Key ); + Assert.AreEqual( 2, q.Fums.Count, "collection of fums" ); + Assert.AreEqual( 1, q.MoreFums.Count, "collection of fums" ); + Assert.AreSame( q, ((Fum)q.MoreFums[0]).QuxArray[0], "unkeyed composite id collection" ); + IEnumerator enumer = q.Fums.Keys.GetEnumerator(); + enumer.MoveNext(); + s.Delete( (Fum)enumer.Current ); + enumer.MoveNext(); + s.Delete( (Fum)enumer.Current ); + s.Delete(q); + s.Flush(); + s.Close(); } [Test] public void DeleteOwner() { + ISession s = sessions.OpenSession(); + Qux q = new Qux(); + s.Save(q); + Fum f1 = new Fum( FumTest.FumKey("f1") ); + Fum f2 = new Fum( FumTest.FumKey("f2") ); + IDictionary dict = new Hashtable(); + dict.Add( f1, new object() ); + dict.Add( f2, new object() ); + IList list = new ArrayList(); + list.Add(f1); + list.Add(f2); + f1.FumString = "f1"; + f2.FumString = "f2"; + q.Fums = dict; + q.MoreFums = list; + s.Save(f1); + s.Save(f2); + s.Flush(); + s.Close(); + + s = sessions.OpenSession(); + ITransaction t = s.BeginTransaction(); + q = (Qux)s.Load( typeof(Qux), q.Key, LockMode.Upgrade ); + s.Lock( q, LockMode.Upgrade ); + s.Delete(q); + t.Commit(); + s.Close(); + + s = sessions.OpenSession(); + t = s.BeginTransaction(); + list = s.Find("from fum in class NHibernate.DomainModel.Fum where not fum.FumString='FRIEND'"); + Assert.AreEqual( 2, list.Count, "deleted owner" ); + s.Lock( list[0], LockMode.Upgrade ); + s.Lock( list[1], LockMode.Upgrade ); + foreach( object obj in list ) + { + s.Delete(obj); + } + t.Commit(); + s.Close(); + + } [Test] public void CompositeIDs() { + ISession s = sessions.OpenSession(); + Fo fo = Fo.NewFo(); + IDictionary props = new Hashtable(); + props["foo"] = "bar"; + props["bar"] = "foo"; + fo.Serial = props; + fo.Buf = System.Text.Encoding.ASCII.GetBytes("abcdefghij1`23%$*^*$*\n\t"); + s.Save( fo, FumTest.FumKey("an instance of fo") ); + s.Flush(); + props["x"] = "y"; + s.Flush(); + s.Close(); + + s = sessions.OpenSession(); + fo = (Fo)s.Load( typeof(Fo), FumTest.FumKey("an instance of fo") ); + props = (IDictionary)fo.Serial; + Assert.AreEqual( "bar", props["foo"] ); + Assert.AreEqual( "y", props["x"] ); + Assert.AreEqual( 'a', fo.Buf[0] ); + fo.Buf[1] = (byte)126; + s.Flush(); + s.Close(); + + s = sessions.OpenSession(); + fo = (Fo)s.Load( typeof(Fo), FumTest.FumKey("an instance of fo") ); + Assert.AreEqual( 126, fo.Buf[1] ); + IEnumerator enumer = s.Enumerable("from fo in class NHibernate.DomainModel.Fo where fo.id.String like 'an instance of fo'").GetEnumerator(); + Assert.IsTrue( enumer.MoveNext() ); + Assert.AreSame( fo, enumer.Current ); + s.Delete(fo); + s.Flush(); + try + { + s.Save( Fo.NewFo() ); + Assert.Fail("should not get here"); + } + catch(Exception e) + { + Assert.IsNotNull(e); + } + s.Close(); } *************** *** 219,228 **** [Test] ! [Ignore("Test not yet written")] public void KeyManyToOne() { ! } ! } } --- 408,461 ---- [Test] ! [Ignore("HQL can't parse a class named 'Order' - http://jira.nhibernate.org:8080/browse/NH-81, this test passes when changed to NHibernate.DomainModel")] public void KeyManyToOne() { ! ISession s = sessions.OpenSession(); ! Inner sup = new Inner(); ! InnerKey sid = new InnerKey(); ! sup.Dudu = "dudu"; ! sid.AKey = "a"; ! sid.BKey = "b"; ! sup.Id = sid; ! Middle m = new Middle(); ! MiddleKey mid = new MiddleKey(); ! mid.One = "one"; ! mid.Two = "two"; ! mid.Sup = sup; ! m.Id = mid; ! m.Bla = "bla"; ! Outer d = new Outer(); ! OuterKey did = new OuterKey(); ! did.Master = m; ! did.DetailId = "detail"; ! d.Id = did; ! d.Bubu = "bubu"; ! s.Save(sup); ! s.Save(m); ! s.Save(d); ! s.Flush(); ! s.Close(); ! s = sessions.OpenSession(); ! d = (Outer)s.Load( typeof(Outer), did ); ! Assert.AreEqual( "dudu", d.Id.Master.Id.Sup.Dudu ); ! s.Delete(d); ! s.Delete( d.Id.Master ); ! s.Save( d.Id.Master ); ! s.Save(d); ! s.Flush(); ! s.Close(); ! ! s = sessions.OpenSession(); ! d = (Outer)s.Find("from Outer o where o.id.DetailId=?", d.Id.DetailId, NHibernate.String)[0]; ! s.Find("from Outer o where o.Id.Master.Id.Sup.Dudu is not null"); ! s.Find("from Outer o where o.Id.Master.Bla = ''"); ! s.Find("from Outer o where o.Id.Master.Id.One = ''"); ! s.Delete(d); ! s.Delete(d.Id.Master); ! s.Delete(d.Id.Master.Id.Sup); ! s.Flush(); ! s.Close(); ! } } } |