|
13 | 13 | using System.Linq;
|
14 | 14 | using NHibernate.Cfg;
|
15 | 15 | using NHibernate.Intercept;
|
| 16 | +using NHibernate.Linq; |
16 | 17 | using NHibernate.Tuple.Entity;
|
17 | 18 | using NUnit.Framework;
|
18 | 19 | using NUnit.Framework.Constraints;
|
19 |
| -using NHibernate.Linq; |
20 | 20 |
|
21 | 21 | namespace NHibernate.Test.LazyProperty
|
22 | 22 | {
|
@@ -67,6 +67,7 @@ protected override void OnSetUp()
|
67 | 67 | Id = 1,
|
68 | 68 | ALotOfText = "a lot of text ...",
|
69 | 69 | Image = new byte[10],
|
| 70 | + NoSetterImage = new byte[10], |
70 | 71 | FieldInterceptor = "Why not that name?"
|
71 | 72 | });
|
72 | 73 | tx.Commit();
|
@@ -391,5 +392,58 @@ public async Task CanMergeTransientWithLazyPropertyInCollectionAsync()
|
391 | 392 | Assert.That(book.Words.First().Content, Is.EqualTo(new byte[1] { 0 }));
|
392 | 393 | }
|
393 | 394 | }
|
| 395 | + |
| 396 | + [Test(Description = "GH-3333")] |
| 397 | + public async Task GetLazyPropertyWithNoSetterAccessor_PropertyShouldBeInitializedAsync() |
| 398 | + { |
| 399 | + using (ISession s = OpenSession()) |
| 400 | + { |
| 401 | + var book = await (s.GetAsync<Book>(1)); |
| 402 | + var image = book.NoSetterImage; |
| 403 | + // Fails. Property remains uninitialized after it has been accessed. |
| 404 | + Assert.That(NHibernateUtil.IsPropertyInitialized(book, "NoSetterImage"), Is.True); |
| 405 | + } |
| 406 | + } |
| 407 | + |
| 408 | + [Test(Description = "GH-3333")] |
| 409 | + public async Task GetLazyPropertyWithNoSetterAccessorTwice_ResultsAreSameObjectAsync() |
| 410 | + { |
| 411 | + using (ISession s = OpenSession()) |
| 412 | + { |
| 413 | + var book = await (s.GetAsync<Book>(1)); |
| 414 | + var image = book.NoSetterImage; |
| 415 | + var sameImage = book.NoSetterImage; |
| 416 | + // Fails. Each call to a property getter returns a new object. |
| 417 | + Assert.That(ReferenceEquals(image, sameImage), Is.True); |
| 418 | + } |
| 419 | + } |
| 420 | + |
| 421 | + [Test] |
| 422 | + public async Task CanSetValueForLazyPropertyNoSetterAsync() |
| 423 | + { |
| 424 | + Book book; |
| 425 | + using (ISession s = OpenSession()) |
| 426 | + { |
| 427 | + book = await (s.GetAsync<Book>(1)); |
| 428 | + book.NoSetterImage = new byte[]{10}; |
| 429 | + } |
| 430 | + |
| 431 | + Assert.That(NHibernateUtil.IsPropertyInitialized(book, nameof(book.NoSetterImage)), Is.True); |
| 432 | + CollectionAssert.AreEqual(book.NoSetterImage, new byte[] { 10 }); |
| 433 | + } |
| 434 | + |
| 435 | + [Test] |
| 436 | + public async Task CanFetchLazyPropertyNoSetterAsync() |
| 437 | + { |
| 438 | + using (ISession s = OpenSession()) |
| 439 | + { |
| 440 | + var book = await (s |
| 441 | + .Query<Book>() |
| 442 | + .Fetch(x => x.NoSetterImage) |
| 443 | + .FirstAsync(x => x.Id == 1)); |
| 444 | + |
| 445 | + Assert.That(NHibernateUtil.IsPropertyInitialized(book, nameof(book.NoSetterImage)), Is.True); |
| 446 | + } |
| 447 | + } |
394 | 448 | }
|
395 | 449 | }
|
0 commit comments