-
Notifications
You must be signed in to change notification settings - Fork 14
/
FlyweightTest.kt
32 lines (29 loc) · 1.31 KB
/
FlyweightTest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package org.vld.sdp.structural
import org.assertj.core.api.Assertions.* // ktlint-disable no-wildcard-imports
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FlyweightTest {
@Test
@DisplayName("Given a glyph factory. When retrieve the same glyph twice. Then return the shared/cached glyph")
fun givenGlyphFactory_whenRetrieveTheSameGlyphTwice_thenReturnSharedCachedGlyph() {
// Given
val glyphFactory = GlyphFactory()
// When
// client works with the Glyph Factory which shares/caches GlyphCode the intrinsic/invariant object state
val glyph1 = glyphFactory.retrieveGlyph("a")
glyph1.position = 1
val glyph2 = glyphFactory.retrieveGlyph("h")
glyph2.position = 2
val glyph3 = glyphFactory.retrieveGlyph("a")
glyph3.position = 3
// client works with glyphs only through the Glyph interface
// which only allows the extrinsic/variant object state modification and the interaction with the objct
val word = listOf(glyph2, glyph3, glyph1).sortedBy(Glyph::position).map(Glyph::show).reduce { word, glyph ->
word + glyph
}
// Then
assertThat(word).isEqualTo("aha")
}
}