How to use Array.shouldContainAnyOf method of io.kotest.matchers.collections.matchers class

Best Kotest code snippet using io.kotest.matchers.collections.matchers.Array.shouldContainAnyOf

CollectionMatchersTest.kt

Source:CollectionMatchersTest.kt Github

copy

Full Screen

1package com.sksamuel.kotest.matchers.collections2import io.kotest.assertions.shouldFail3import io.kotest.assertions.throwables.shouldNotThrow4import io.kotest.assertions.throwables.shouldThrow5import io.kotest.assertions.withClue6import io.kotest.core.spec.style.WordSpec7import io.kotest.equals.Equality8import io.kotest.equals.types.byObjectEquality9import io.kotest.matchers.collections.atLeastSize10import io.kotest.matchers.collections.atMostSize11import io.kotest.matchers.collections.beLargerThan12import io.kotest.matchers.collections.beSameSizeAs13import io.kotest.matchers.collections.beSmallerThan14import io.kotest.matchers.collections.contain15import io.kotest.matchers.collections.containDuplicates16import io.kotest.matchers.collections.containNoNulls17import io.kotest.matchers.collections.containNull18import io.kotest.matchers.collections.containOnlyNulls19import io.kotest.matchers.collections.matchInOrder20import io.kotest.matchers.collections.existInOrder21import io.kotest.matchers.collections.haveElementAt22import io.kotest.matchers.collections.haveSize23import io.kotest.matchers.collections.matchEach24import io.kotest.matchers.collections.matchInOrderSubset25import io.kotest.matchers.collections.monotonicallyDecreasing26import io.kotest.matchers.collections.monotonicallyDecreasingWith27import io.kotest.matchers.collections.monotonicallyIncreasing28import io.kotest.matchers.collections.monotonicallyIncreasingWith29import io.kotest.matchers.collections.shouldBeIn30import io.kotest.matchers.collections.shouldBeLargerThan31import io.kotest.matchers.collections.shouldBeMonotonicallyDecreasing32import io.kotest.matchers.collections.shouldBeMonotonicallyDecreasingWith33import io.kotest.matchers.collections.shouldBeMonotonicallyIncreasing34import io.kotest.matchers.collections.shouldBeMonotonicallyIncreasingWith35import io.kotest.matchers.collections.shouldBeSameSizeAs36import io.kotest.matchers.collections.shouldBeSingleton37import io.kotest.matchers.collections.shouldBeSmallerThan38import io.kotest.matchers.collections.shouldBeSorted39import io.kotest.matchers.collections.shouldBeSortedBy40import io.kotest.matchers.collections.shouldBeSortedWith41import io.kotest.matchers.collections.shouldBeStrictlyDecreasing42import io.kotest.matchers.collections.shouldBeStrictlyDecreasingWith43import io.kotest.matchers.collections.shouldBeStrictlyIncreasing44import io.kotest.matchers.collections.shouldBeStrictlyIncreasingWith45import io.kotest.matchers.collections.shouldContainAnyOf46import io.kotest.matchers.collections.shouldContainDuplicates47import io.kotest.matchers.collections.shouldContainNoNulls48import io.kotest.matchers.collections.shouldContainNull49import io.kotest.matchers.collections.shouldContainOnlyNulls50import io.kotest.matchers.collections.shouldExist51import io.kotest.matchers.collections.shouldHaveAtLeastSize52import io.kotest.matchers.collections.shouldHaveAtMostSize53import io.kotest.matchers.collections.shouldHaveElementAt54import io.kotest.matchers.collections.shouldHaveSingleElement55import io.kotest.matchers.collections.shouldHaveSize56import io.kotest.matchers.collections.shouldMatchInOrder57import io.kotest.matchers.collections.shouldMatchInOrderSubset58import io.kotest.matchers.collections.shouldNotBeIn59import io.kotest.matchers.collections.shouldNotBeMonotonicallyDecreasing60import io.kotest.matchers.collections.shouldNotBeMonotonicallyDecreasingWith61import io.kotest.matchers.collections.shouldNotBeMonotonicallyIncreasing62import io.kotest.matchers.collections.shouldNotBeMonotonicallyIncreasingWith63import io.kotest.matchers.collections.shouldNotBeSingleton64import io.kotest.matchers.collections.shouldNotBeSorted65import io.kotest.matchers.collections.shouldNotBeSortedBy66import io.kotest.matchers.collections.shouldNotBeSortedWith67import io.kotest.matchers.collections.shouldNotBeStrictlyDecreasing68import io.kotest.matchers.collections.shouldNotBeStrictlyDecreasingWith69import io.kotest.matchers.collections.shouldNotBeStrictlyIncreasing70import io.kotest.matchers.collections.shouldNotBeStrictlyIncreasingWith71import io.kotest.matchers.collections.shouldNotContainAnyOf72import io.kotest.matchers.collections.shouldNotContainDuplicates73import io.kotest.matchers.collections.shouldNotContainNoNulls74import io.kotest.matchers.collections.shouldNotContainNull75import io.kotest.matchers.collections.shouldNotContainOnlyNulls76import io.kotest.matchers.collections.shouldNotHaveElementAt77import io.kotest.matchers.collections.shouldNotHaveSize78import io.kotest.matchers.collections.shouldNotMatchEach79import io.kotest.matchers.collections.shouldNotMatchInOrder80import io.kotest.matchers.collections.shouldNotMatchInOrderSubset81import io.kotest.matchers.collections.singleElement82import io.kotest.matchers.collections.sorted83import io.kotest.matchers.collections.strictlyDecreasing84import io.kotest.matchers.collections.strictlyDecreasingWith85import io.kotest.matchers.collections.strictlyIncreasing86import io.kotest.matchers.collections.strictlyIncreasingWith87import io.kotest.matchers.ints.shouldBeGreaterThan88import io.kotest.matchers.ints.shouldBeInRange89import io.kotest.matchers.should90import io.kotest.matchers.shouldBe91import io.kotest.matchers.shouldHave92import io.kotest.matchers.shouldNot93import io.kotest.matchers.shouldNotBe94import io.kotest.matchers.shouldNotHave95import io.kotest.matchers.throwable.shouldHaveMessage96class CollectionMatchersTest : WordSpec() {97 private val countdown = (10 downTo 0).toList()98 private val asc = { a: Int, b: Int -> a - b }99 private val desc = { a: Int, b: Int -> b - a }100 init {101 "a descending non-empty list" should {102 "fail to ascend" {103 shouldFail {104 countdown.shouldBeSortedWith(asc)105 }106 }107 "descend" {108 countdown.shouldBeSortedWith(desc)109 }110 "not ascend" {111 countdown.shouldNotBeSortedWith(asc)112 }113 "fail not to descend" {114 shouldFail {115 countdown.shouldNotBeSortedWith(desc)116 }117 }118 }119 "sortedWith" should {120 val items = listOf(121 1 to "I",122 2 to "II",123 4 to "IV",124 5 to "V",125 6 to "VI",126 9 to "IX",127 10 to "X"128 )129 "work on non-Comparable given a Comparator" {130 items.shouldBeSortedWith(Comparator { a, b -> asc(a.first, b.first) })131 }132 "work on non-Comparable given a compare function" {133 items.shouldBeSortedWith { a, b -> asc(a.first, b.first) }134 }135 }136 "haveElementAt" should {137 "test that a collection contains the specified element at the given index" {138 listOf("a", "b", "c") should haveElementAt(1, "b")139 listOf("a", "b", "c") shouldNot haveElementAt(1, "c")140 listOf("a", "b", null) should haveElementAt(2, null)141 listOf("a", "b", null) shouldNot haveElementAt(3, null)142 listOf("a", "b", "c").shouldHaveElementAt(1, "b")143 listOf("a", "b", "c").shouldNotHaveElementAt(1, "c")144 listOf("a", "b", null).shouldHaveElementAt(2, null)145 }146 "support type inference for subtypes of collection" {147 val tests = listOf(148 TestSealed.Test1("test1"),149 TestSealed.Test2(2)150 )151 tests should haveElementAt(0, TestSealed.Test1("test1"))152 tests.shouldHaveElementAt(1, TestSealed.Test2(2))153 }154 }155 "containNull()" should {156 "test that a collection contains at least one null" {157 listOf(1, 2, null) should containNull()158 listOf(null) should containNull()159 listOf(1, 2) shouldNot containNull()160 listOf(1, 2, null).shouldContainNull()161 listOf(null).shouldContainNull()162 listOf(1, 2).shouldNotContainNull()163 }164 }165 "sorted" should {166 "test that a collection is sorted" {167 emptyList<Int>() shouldBe sorted<Int>()168 listOf(1) shouldBe sorted<Int>()169 listOf(1, 2, 3, 4) shouldBe sorted<Int>()170 shouldThrow<AssertionError> {171 listOf(2, 1) shouldBe sorted<Int>()172 }.shouldHaveMessage("List [2, 1] should be sorted. Element 2 at index 0 was greater than element 1")173 listOf(1, 2, 6, 9).shouldBeSorted()174 shouldThrow<AssertionError> {175 listOf(2, 1).shouldBeSorted()176 }.shouldHaveMessage("List [2, 1] should be sorted. Element 2 at index 0 was greater than element 1")177 shouldThrow<AssertionError> {178 listOf(1, 2, 3).shouldNotBeSorted()179 }.shouldHaveMessage("List [1, 2, 3] should not be sorted")180 }181 "restrict items at the error message" {182 val longList = (1..1000).toList()183 shouldThrow<AssertionError> {184 longList.shouldNotBeSorted()185 }.shouldHaveMessage("List [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...and 980 more (set the 'kotest.assertions.collection.print.size' JVM property to see more / less items)] should not be sorted")186 }187 }188 "sortedBy" should {189 val items = listOf(190 1 to "I",191 2 to "II",192 4 to "IV",193 5 to "V",194 6 to "VI",195 9 to "IX",196 10 to "X"197 )198 "compare by the tranformed value" {199 items.shouldBeSortedBy { it.first }200 items.shouldNotBeSortedBy { it.second }201 }202 }203 "shouldBeIncreasing" should {204 "test that a collection is monotonically increasing" {205 listOf(1, 2, 2, 3) shouldBe monotonicallyIncreasing<Int>()206 listOf(6, 5) shouldNotBe monotonicallyIncreasing<Int>()207 listOf(1, 2, 2, 3).shouldBeMonotonicallyIncreasing()208 listOf(6, 5).shouldNotBeMonotonicallyIncreasing()209 }210 "test that a collection is monotonically increasing according to comparator" {211 val comparator = Comparator(desc)212 listOf(3, 2, 2, 1) shouldBe monotonicallyIncreasingWith(comparator)213 listOf(5, 6) shouldNotBe monotonicallyIncreasingWith(comparator)214 listOf(3, 2, 2, 1).shouldBeMonotonicallyIncreasingWith(comparator)215 listOf(5, 6).shouldNotBeMonotonicallyIncreasingWith(comparator)216 }217 "test that a collection is strictly increasing" {218 listOf(1, 2, 3) shouldBe strictlyIncreasing<Int>()219 listOf(1, 2, 2, 3) shouldNotBe strictlyIncreasing<Int>()220 listOf(6, 5) shouldNotBe strictlyIncreasing<Int>()221 listOf(1, 2, 3).shouldBeStrictlyIncreasing()222 listOf(1, 2, 2, 3).shouldNotBeStrictlyIncreasing()223 listOf(6, 5).shouldNotBeStrictlyIncreasing()224 }225 "test that a collection is strictly increasing according to comparator" {226 val comparator = Comparator(desc)227 listOf(3, 2, 1) shouldBe strictlyIncreasingWith(comparator)228 listOf(3, 2, 2, 1) shouldNotBe strictlyIncreasingWith(comparator)229 listOf(5, 6) shouldNotBe strictlyIncreasingWith(comparator)230 listOf(3, 2, 1).shouldBeStrictlyIncreasingWith(comparator)231 listOf(3, 2, 2, 1).shouldNotBeStrictlyIncreasingWith(comparator)232 listOf(5, 6).shouldNotBeStrictlyIncreasingWith(comparator)233 }234 }235 "shouldBeDecreasing" should {236 "test that a collection is monotonically decreasing" {237 listOf(3, 2, 2, -4) shouldBe monotonicallyDecreasing<Int>()238 listOf(5, 6) shouldNotBe monotonicallyDecreasing<Int>()239 listOf(3, 2, 2, -4).shouldBeMonotonicallyDecreasing()240 listOf(5, 6).shouldNotBeMonotonicallyDecreasing()241 }242 "test that a collection is monotonically decreasing according to comparator" {243 val comparator = Comparator(desc)244 listOf(-4, 2, 2, 3) shouldBe monotonicallyDecreasingWith(comparator)245 listOf(6, 5) shouldNotBe monotonicallyDecreasingWith(comparator)246 listOf(-4, 2, 2, 3).shouldBeMonotonicallyDecreasingWith(comparator)247 listOf(6, 5).shouldNotBeMonotonicallyDecreasingWith(comparator)248 }249 "test that a collection is strictly decreasing" {250 listOf(3, 2, -4) shouldBe strictlyDecreasing<Int>()251 listOf(3, 2, 2, -4) shouldNotBe strictlyDecreasing<Int>()252 listOf(5, 6) shouldNotBe strictlyDecreasing<Int>()253 listOf(3, 2, -4).shouldBeStrictlyDecreasing()254 listOf(3, 2, 2, -4).shouldNotBeStrictlyDecreasing()255 listOf(5, 6).shouldNotBeStrictlyDecreasing()256 }257 "test that a collection is strictly decreasing according to comparator" {258 val comparator = Comparator(desc)259 listOf(-4, 2, 3) shouldBe strictlyDecreasingWith(comparator)260 listOf(-4, 2, 2, 3) shouldNotBe strictlyDecreasingWith(comparator)261 listOf(6, 5) shouldNotBe strictlyDecreasingWith(comparator)262 listOf(-4, 2, 3).shouldBeStrictlyDecreasingWith(comparator)263 listOf(-4, 2, 2, 3).shouldNotBeStrictlyDecreasingWith(comparator)264 listOf(6, 5).shouldNotBeStrictlyDecreasingWith(comparator)265 }266 }267 "haveDuplicates" should {268 "test that a collection is unique" {269 listOf(1, 2, 3, 3) should containDuplicates()270 listOf(1, 2, 3, 4) shouldNot containDuplicates()271 listOf(1, 2, 3, 3).shouldContainDuplicates()272 listOf(1, 2, 3, 4).shouldNotContainDuplicates()273 }274 }275 "singleElement" should {276 "test that a collection contains a single given element" {277 listOf(1) shouldBe singleElement(1)278 listOf(1).shouldHaveSingleElement(1)279 shouldThrow<AssertionError> {280 listOf(1) shouldBe singleElement(2)281 }.shouldHaveMessage("Collection should be a single element of 2 but has 1 elements: [1]")282 shouldThrow<AssertionError> {283 listOf(1, 2) shouldBe singleElement(2)284 }.shouldHaveMessage("Collection should be a single element of 2 but has 2 elements: [1, 2]")285 }286 }287 "singleElement with predicate" should {288 "test that a collection contains a single element by given predicate" {289 listOf(1) shouldHave singleElement { e -> e == 1 }290 listOf(1).shouldHaveSingleElement { e -> e == 1 }291 shouldThrow<AssertionError> {292 listOf(1) shouldHave singleElement { e -> e == 2 }293 }.shouldHaveMessage("Collection should have a single element by a given predicate but has 0 elements: [1]")294 shouldThrow<AssertionError> {295 listOf(2, 2) shouldHave singleElement { e -> e == 2 }296 }.shouldHaveMessage("Collection should have a single element by a given predicate but has 2 elements: [2, 2]")297 }298 }299 "should contain element" should {300 "test that a collection contains an element" {301 val col = listOf(1, 2, 3)302 col should contain(2)303 col should contain(2.0) // uses strict num equality = false304 shouldThrow<AssertionError> {305 col should contain(4)306 }.shouldHaveMessage("Collection should contain element 4 based on object equality; but the collection is [1, 2, 3]")307 }308 }309 "should contain element based on a custom equality object" should {310 "test that a collection contains an element" {311 val col = listOf(1, 2, 3.0)312 val verifier = Equality.byObjectEquality<Number>(strictNumberEquality = true)313 col should contain(2, verifier)314 col should contain(3.0, verifier)315 shouldThrow<AssertionError> {316 col should contain(3, verifier)317 }.shouldHaveMessage("Collection should contain element 3 based on object equality; but the collection is [1, 2, 3.0]")318 }319 }320 "shouldBeLargerThan" should {321 "test that a collection is larger than another collection" {322 val col1 = listOf(1, 2, 3)323 val col2 = setOf(1, 2, 3, 4)324 col2.shouldBeLargerThan(col1)325 col2 should beLargerThan(col1)326 col1 shouldNot beLargerThan(col2)327 shouldThrow<AssertionError> {328 col1.shouldBeLargerThan(col2)329 }.shouldHaveMessage("Collection of size 3 should be larger than collection of size 4")330 }331 }332 "shouldBeSmallerThan" should {333 "test that a collection is smaller than another collection" {334 val col1 = listOf(1, 2, 3)335 val col2 = setOf(1, 2, 3, 4)336 col1.shouldBeSmallerThan(col2)337 col1 should beSmallerThan(col2)338 col2 shouldNot beSmallerThan(col1)339 shouldThrow<AssertionError> {340 col2.shouldBeSmallerThan(col1)341 }.shouldHaveMessage("Collection of size 4 should be smaller than collection of size 3")342 }343 }344 "shouldBeSameSizeAs" should {345 "test that a collection is the same size as another collection" {346 val col1 = listOf(1, 2, 3)347 val col2 = setOf(1, 2, 3)348 val col3 = listOf(1, 2, 3, 4)349 col1.shouldBeSameSizeAs(col2)350 col1 should beSameSizeAs(col2)351 col1 shouldNot beSameSizeAs(col3)352 shouldThrow<AssertionError> {353 col1.shouldBeSameSizeAs(col3)354 }.shouldHaveMessage("Collection of size 3 should be the same size as collection of size 4")355 }356 }357 "haveSize" should {358 "test that a collection has a certain size" {359 val col1 = listOf(1, 2, 3)360 col1 should haveSize(3)361 col1.shouldHaveSize(3)362 shouldThrow<AssertionError> {363 col1 should haveSize(2)364 }365 val col2 = emptyList<String>()366 col2 should haveSize(0)367 shouldThrow<AssertionError> {368 col2 should haveSize(1)369 }370 listOf(1, 2, 3).shouldNotHaveSize(1)371 listOf(1, 2, 3).shouldNotHaveSize(4)372 shouldThrow<AssertionError> {373 listOf(1, 2, 3).shouldNotHaveSize(3)374 }.shouldHaveMessage("Collection should not have size 3. Values: [1, 2, 3]")375 }376 }377 "should be singleton" should {378 "pass for collection with a single element" {379 listOf(1).shouldBeSingleton()380 }381 "fail for collection with 0 elements" {382 shouldThrow<AssertionError> {383 listOf<Int>().shouldBeSingleton()384 }.shouldHaveMessage("Collection should have size 1 but has size 0. Values: []")385 }386 "fail for collection with 2+ elements" {387 shouldThrow<AssertionError> {388 listOf(1, 2).shouldBeSingleton()389 }.shouldHaveMessage("Collection should have size 1 but has size 2. Values: [1, 2]")390 shouldThrow<AssertionError> {391 listOf(1, 2, 3, 4).shouldBeSingleton()392 }.shouldHaveMessage("Collection should have size 1 but has size 4. Values: [1, 2, 3, 4]")393 }394 }395 "should be singleton with block" should {396 "pass for collection with a single element" {397 listOf(1).shouldBeSingleton { it shouldBe 1 }398 }399 "fail for collection with 0 elements" {400 shouldThrow<AssertionError> {401 listOf<Int>().shouldBeSingleton { it shouldBe 1 }402 }.shouldHaveMessage("Collection should have size 1 but has size 0. Values: []")403 }404 "fail for collection with a single incorrect elements" {405 shouldThrow<AssertionError> {406 listOf(2).shouldBeSingleton { it shouldBe 1 }407 }.shouldHaveMessage("expected:<1> but was:<2>")408 }409 "fail for collection with 2+ elements" {410 shouldThrow<AssertionError> {411 listOf(1, 2).shouldBeSingleton { it shouldBe 1 }412 }.shouldHaveMessage("Collection should have size 1 but has size 2. Values: [1, 2]")413 shouldThrow<AssertionError> {414 listOf(1, 2, 3, 4).shouldBeSingleton { it shouldBe 1 }415 }.shouldHaveMessage("Collection should have size 1 but has size 4. Values: [1, 2, 3, 4]")416 }417 }418 "should not be singleton" should {419 "pass for collection with 0 elements" {420 listOf<Int>().shouldNotBeSingleton()421 }422 "pass for collection with 2+ elements" {423 listOf(1, 2).shouldNotBeSingleton()424 listOf(1, 2, 3, 4).shouldNotBeSingleton()425 }426 "fail for collection with a single element" {427 shouldThrow<AssertionError> {428 listOf(1).shouldNotBeSingleton()429 }.shouldHaveMessage("Collection should not have size 1. Values: [1]")430 }431 }432 "shouldExist" should {433 "test that a collection contains at least one element that matches a predicate" {434 val list = listOf(1, 2, 3)435 list.shouldExist { it == 2 }436 }437 }438 "shouldHaveAtLeastSize" should {439 "test that a collection has at least a certain number of elements" {440 val list = listOf(1, 2, 3)441 list.shouldHaveAtLeastSize(2)442 list shouldHave atLeastSize(2)443 val set = setOf(1, 2, 3)444 set.shouldHaveAtLeastSize(3)445 set shouldHave atLeastSize(3)446 shouldThrow<AssertionError> {447 list.shouldHaveAtLeastSize(4)448 }.shouldHaveMessage("Collection [1, 2, 3] should contain at least 4 elements")449 shouldThrow<AssertionError> {450 list shouldHave atLeastSize(4)451 }.shouldHaveMessage("Collection [1, 2, 3] should contain at least 4 elements")452 shouldThrow<AssertionError> {453 list shouldNotHave atLeastSize(2)454 }.shouldHaveMessage("Collection [1, 2, 3] should contain less than 2 elements")455 }456 }457 "shouldHaveAtMostSize" should {458 "test that a collection has at least a certain number of elements" {459 val list = listOf(1, 2, 3)460 list.shouldHaveAtMostSize(3)461 list shouldHave atMostSize(3)462 list.shouldHaveAtMostSize(4)463 list shouldHave atMostSize(4)464 val set = setOf(1, 2, 3)465 set.shouldHaveAtMostSize(3)466 set shouldHave atMostSize(3)467 set.shouldHaveAtMostSize(4)468 set shouldHave atMostSize(4)469 shouldThrow<AssertionError> {470 list.shouldHaveAtMostSize(2)471 }.shouldHaveMessage("Collection [1, 2, 3] should contain at most 2 elements")472 shouldThrow<AssertionError> {473 list shouldHave atMostSize(2)474 }.shouldHaveMessage("Collection [1, 2, 3] should contain at most 2 elements")475 shouldThrow<AssertionError> {476 list shouldNotHave atMostSize(4)477 }.shouldHaveMessage("Collection [1, 2, 3] should contain more than 4 elements")478 }479 }480 "containNoNulls" should {481 "test that a collection contains zero nulls" {482 emptyList<String>() should containNoNulls()483 listOf(1, 2, 3) should containNoNulls()484 listOf(null, null, null) shouldNot containNoNulls()485 listOf(1, null, null) shouldNot containNoNulls()486 emptyList<String>().shouldContainNoNulls()487 listOf(1, 2, 3).shouldContainNoNulls()488 listOf(null, null, null).shouldNotContainNoNulls()489 listOf(1, null, null).shouldNotContainNoNulls()490 shouldThrow<AssertionError> {491 listOf(null, null, null).shouldContainNoNulls()492 }.shouldHaveMessage("Collection should not contain nulls")493 shouldThrow<AssertionError> {494 listOf(1, 2, 3).shouldNotContainNoNulls()495 }.shouldHaveMessage("Collection should have at least one null")496 }497 "support type inference for subtypes of collection" {498 val tests = listOf(499 TestSealed.Test1("test1"),500 TestSealed.Test2(2)501 )502 tests should containNoNulls()503 tests.shouldContainNoNulls()504 }505 }506 "containOnlyNulls" should {507 "test that a collection contains only nulls" {508 emptyList<String>() should containOnlyNulls()509 listOf(null, null, null) should containOnlyNulls()510 listOf(1, null, null) shouldNot containOnlyNulls()511 listOf(1, 2, 3) shouldNot containOnlyNulls()512 listOf(null, 1, 2, 3).shouldNotContainOnlyNulls()513 listOf(1, 2, 3).shouldNotContainOnlyNulls()514 listOf(null, null, null).shouldContainOnlyNulls()515 }516 }517 "matchInOrder" should {518 "test that a collection matches the assertions in the given order, duplicates permitted" {519 withClue("Gaps not allowed") {520 shouldFail {521 listOf(1, 2, 2, 3) should matchInOrder(522 { it shouldBe 1 },523 { it shouldBe 2 },524 { it shouldBe 3 }525 )526 }527 }528 arrayOf(2, 2, 3).shouldMatchInOrder(529 { it shouldBe 2 },530 { it shouldBe 2 },531 { it shouldBe 3 },532 )533 }534 "failure shows best result" {535 shouldFail {536 listOf(1, 2, 3, 1, 2, 1, 2).shouldMatchInOrder(537 { it shouldBe 1 },538 { it shouldBe 2 },539 { it shouldBe 1 },540 { it shouldBe 3 },541 )542 }.message shouldBe """543 Expected a sequence of elements to pass the assertions, but failed to match all assertions544 Best result when comparing from index [3], where 3 elements passed, but the following elements failed:545 6 => expected:<3> but was:<2>546 """.trimIndent()547 }548 "Non existing element causes error" {549 shouldThrow<AssertionError> {550 listOf(1, 2, 3).shouldMatchInOrder(551 { it shouldBe 1 },552 { it shouldBe 2 },553 { it shouldBe 6 }554 )555 }556 }557 "out-of-order elements cause error" {558 shouldThrow<AssertionError> {559 listOf(1, 2, 3) should matchInOrder(560 { it shouldBe 2 },561 { it shouldBe 1 },562 { it shouldBe 3 }563 )564 }565 }566 "work with unsorted collections" {567 val actual = listOf(5, 3, 1, 2, 4, 2)568 withClue("should match 4th, 5th and 6th elements ([.., 2, 4, 2])") {569 actual should matchInOrder(570 { it shouldBe 2 },571 { it shouldBeGreaterThan 3 },572 { it shouldBeInRange 2..2 }573 )574 }575 }576 "negation should work" {577 shouldFail {578 listOf(1, 2, 3, 4).shouldNotMatchInOrder(579 { it shouldBe 2 },580 { it shouldBe 3 },581 )582 }.message shouldBe """583 Expected some assertion to fail but all passed584 """.trimIndent()585 listOf(1, 2, 3, 4).shouldNotMatchInOrder(586 { it shouldBe 2 },587 { it shouldBe 4 }588 )589 }590 }591 "matchInOrderSubset" should {592 "test that a collection matches the assertions in the given order without gaps" {593 listOf(1, 1, 2, 2, 3, 3) should matchInOrderSubset(594 { it shouldBe 1 },595 { it shouldBe 2 },596 { it shouldBe 2 },597 { it shouldBe 3 }598 )599 arrayOf(1, 1, 1).shouldMatchInOrderSubset(600 { it shouldBe 1 }601 )602 }603 "Negation should work" {604 shouldFail {605 listOf(1, 2, 3, 4).shouldNotMatchInOrderSubset(606 { it shouldBe 2 },607 { it shouldBe 4 },608 )609 }.message shouldBe """610 Expected some assertion to fail but all passed611 """.trimIndent()612 arrayOf(1, 2, 3, 4).shouldNotMatchInOrder(613 { it shouldBe 4 },614 { it shouldBe 1 }615 )616 }617 "Non existing element causes error" {618 shouldThrow<AssertionError> {619 listOf(1, 1, 2, 2, 3, 3) should matchInOrderSubset(620 { it shouldBe 1 },621 { it shouldBe 2 },622 { it shouldBe 6 }623 )624 }.message shouldBe """625 Expected a sequence of elements to pass the assertions, possibly with gaps between but failed to match all assertions626 Best result when comparing from index [0], where 2 elements passed, but the following elements failed:627 3 => expected:<6> but was:<2>628 4 => expected:<6> but was:<3>629 5 => expected:<6> but was:<3>630 """.trimIndent()631 }632 "out-of-order elements cause error" {633 shouldThrow<AssertionError> {634 listOf(1, 2, 3) should matchInOrderSubset(635 { it shouldBe 2 },636 { it shouldBe 1 },637 { it shouldBe 3 }638 )639 }640 }641 "gaps should be ok" {642 listOf(1, 1, 2, 2, 3, 3) should matchInOrderSubset(643 { it shouldBe 1 },644 { it shouldBe 2 },645 { it shouldBe 3 }646 )647 }648 "work with unsorted collections" {649 val actual = listOf(5, 3, 1, 2, 4, 2)650 withClue("should match 4th, 5th and 6th elements ([.., 2, 4, 2])") {651 actual should matchInOrderSubset(652 { it shouldBe 2 },653 { it shouldBeGreaterThan 3 },654 { it shouldBeInRange 2..2 }655 )656 }657 }658 }659 "matchEach" should {660 "test that a collection matches the assertions in the given order without gaps" {661 listOf(1, 3, 7) should matchEach(662 { it shouldBe 1 },663 { it shouldBeInRange 2..4 },664 { it shouldBeGreaterThan 2 }665 )666 }667 "Negation should work" {668 shouldFail{669 listOf(1, 2).shouldNotMatchEach(670 { it shouldBe 1 },671 { it shouldBe 2 },672 )673 }.message shouldBe """674 Expected some element to fail its assertion, but all passed.675 """.trimIndent()676 arrayOf(1, 2).shouldNotMatchEach(677 { it shouldBe 2 },678 { it shouldBe 1 }679 )680 }681 "No assertion exists for each element" {682 shouldFail {683 listOf(1, -1, 999) should matchEach(684 { it shouldBe 1 }685 )686 }.message shouldBe """687 Expected each element to pass its assertion, but found issues at indexes: [1, 2]688 1 => Element has no corresponding assertion. Only 1 assertions provided689 2 => Element has no corresponding assertion. Only 1 assertions provided690 """.trimIndent()691 }692 "Too many assertions cause error" {693 shouldFail {694 listOf(1, 3, 7) should matchEach(695 { it shouldBe 1 },696 { it shouldBe 3 },697 { it shouldBe 7 },698 { it shouldBe 7 },699 { it shouldBe 7 },700 )701 }.message shouldBe """702 Expected each element to pass its assertion, but found issues at indexes: [3, 4]703 3 => No actual element for assertion at index 3704 4 => No actual element for assertion at index 4705 """.trimIndent()706 }707 "Non matching element causes error" {708 shouldFail {709 listOf(1, 3, 7) should matchEach(710 { it shouldBe 1 },711 { it shouldBeInRange 2..4 },712 { it shouldBeGreaterThan 7 }713 )714 }.message shouldBe """715 Expected each element to pass its assertion, but found issues at indexes: [2]716 2 => 7 should be > 7717 """.trimIndent()718 }719 "out-of-order elements cause error" {720 shouldThrow<AssertionError> {721 setOf(2, 3, 1) should matchEach(722 { it shouldBe 2 },723 { it shouldBe 1 },724 { it shouldBe 3 }725 )726 }.message shouldBe """727 Expected each element to pass its assertion, but found issues at indexes: [1, 2]728 1 => expected:<1> but was:<3>729 2 => expected:<3> but was:<1>730 """.trimIndent()731 }732 "gaps cause errors" {733 shouldThrow<AssertionError> {734 listOf(1, 1, 2, 2, 3, 3) should matchEach(735 { it shouldBe 1 },736 { it shouldBe 2 },737 { it shouldBe 3 }738 )739 }.message shouldBe """740 Expected each element to pass its assertion, but found issues at indexes: [1, 2, 3, 4, 5]741 1 => expected:<2> but was:<1>742 2 => expected:<3> but was:<2>743 3 => Element has no corresponding assertion. Only 3 assertions provided744 4 => Element has no corresponding assertion. Only 3 assertions provided745 5 => Element has no corresponding assertion. Only 3 assertions provided746 """.trimIndent()747 }748 }749 "existInOrder" should {750 "test that a collection matches the predicates in the given order, duplicates permitted" {751 val col = listOf(1, 1, 2, 2, 3, 3)752 col should existInOrder(753 { it == 1 },754 { it == 2 },755 { it == 3 }756 )757 col should existInOrder({ it == 1 })758 shouldThrow<AssertionError> {759 col should existInOrder(760 { it == 1 },761 { it == 2 },762 { it == 6 }763 )764 }765 shouldThrow<AssertionError> {766 col should existInOrder({ it == 4 })767 }768 shouldThrow<AssertionError> {769 col should existInOrder(770 { it == 2 },771 { it == 1 },772 { it == 3 }773 )774 }775 }776 "work with unsorted collections" {777 val actual = listOf(5, 3, 1, 2, 4, 2)778 actual should existInOrder(779 { it == 3 },780 { it == 2 },781 { it == 2 }782 )783 }784 }785 "Contain any" should {786 "Fail when the list is empty" {787 shouldThrow<AssertionError> {788 listOf(1, 2, 3).shouldContainAnyOf(emptyList())789 }.shouldHaveMessage("Asserting content on empty collection. Use Collection.shouldBeEmpty() instead.")790 }791 "Pass when one element is in the list" {792 listOf(1, 2, 3).shouldContainAnyOf(1)793 }794 "Pass when all elements are in the list" {795 listOf(1, 2, 3).shouldContainAnyOf(1, 2, 3)796 }797 "Fail when no element is in the list" {798 shouldThrow<AssertionError> {799 listOf(1, 2, 3).shouldContainAnyOf(4)800 }.shouldHaveMessage("Collection [1, 2, 3] should contain any of [4]")801 }802 }803 "Contain any (negative)" should {804 "Fail when the list is empty" {805 shouldThrow<AssertionError> {806 listOf(1, 2, 3).shouldNotContainAnyOf(emptyList())807 }.shouldHaveMessage("Asserting content on empty collection. Use Collection.shouldBeEmpty() instead.")808 }809 "Pass when no element is present in the list" {810 listOf(1, 2, 3).shouldNotContainAnyOf(4)811 }812 "Fail when one element is in the list" {813 shouldThrow<AssertionError> {814 listOf(1, 2, 3).shouldNotContainAnyOf(1)815 }.shouldHaveMessage("Collection [1, 2, 3] should not contain any of [1]")816 }817 "Fail when all elements are in the list" {818 shouldThrow<AssertionError> {819 listOf(1, 2, 3).shouldNotContainAnyOf(1, 2, 3)820 }.shouldHaveMessage("Collection [1, 2, 3] should not contain any of [1, 2, 3]")821 }822 }823 "Be in" should {824 "Pass when the element is in the list" {825 val foo = Foo("Bar")826 val list = listOf(foo)827 foo shouldBeIn list828 }829 "Fail when the element is not in the list" {830 val foo1 = Foo("Bar")831 val foo2 = Foo("Booz")832 val list = listOf(foo1)833 shouldThrow<AssertionError> {834 foo2.shouldBeIn(list)835 }.shouldHaveMessage("Collection should contain Foo(bar=Booz), but doesn't. Possible values: [Foo(bar=Bar)]")836 }837 "Pass when there's an equal element, but not the same instance in the list" {838 val foo1 = Foo("Bar")839 val foo2 = Foo("Bar")840 val list = listOf(foo1)841 shouldNotThrow<AssertionError> { foo2 shouldBeIn list }842 }843 "Pass when there's an equal element, but not the same instance in the array" {844 val foo1 = Foo("Bar")845 val foo2 = Foo("Bar")846 val list = arrayOf(foo1)847 shouldNotThrow<AssertionError> { foo2 shouldBeIn list }848 }849 "Fail when the list is empty" {850 val foo = Foo("Bar")851 val list = emptyList<Foo>()852 shouldThrow<AssertionError> {853 foo shouldBeIn list854 }.shouldHaveMessage("Asserting content on empty collection. Use Collection.shouldBeEmpty() instead.")855 }856 }857 "Be in (negative)" should {858 "Fail when the element is in the list" {859 val foo = Foo("Bar")860 val list = listOf(foo)861 shouldThrow<AssertionError> {862 foo shouldNotBeIn list863 }.shouldHaveMessage("Collection should not contain Foo(bar=Bar), but does. Forbidden values: [Foo(bar=Bar)]")864 }865 "Pass when the element is not in the list" {866 val foo1 = Foo("Bar")867 val foo2 = Foo("Booz")868 val list = listOf(foo1)869 shouldNotThrow<AssertionError> {870 foo2.shouldNotBeIn(list)871 }872 }873 "Fail when there's an equal element, but not the same instance in the list" {874 val foo1 = Foo("Bar")875 val foo2 = Foo("Bar")876 val list = listOf(foo1)877 shouldThrow<AssertionError> {878 foo2 shouldNotBeIn list879 }.shouldHaveMessage("Collection should not contain Foo(bar=Bar), but does. Forbidden values: [Foo(bar=Bar)]")880 }881 "Fail when the list is empty" {882 val foo = Foo("Bar")883 val list = emptyList<Foo>()884 shouldThrow<AssertionError> {885 foo shouldNotBeIn list886 }.shouldHaveMessage("Asserting content on empty collection. Use Collection.shouldBeEmpty() instead.")887 }888 }889 }890}891private data class Foo(val bar: String)892sealed class TestSealed {893 data class Test1(val value: String) : TestSealed()894 data class Test2(val value: Int) : TestSealed()895}...

Full Screen

Full Screen

ConfigPluginComposableSpecs.kt

Source:ConfigPluginComposableSpecs.kt Github

copy

Full Screen

1package spec2import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask3import helper.accessField4import helper.getDependencies5import helper.getDependency6import helper.getMavenBom7import helper.getMavenPublication8import helper.getMavenRepository9import helper.getPlugin10import helper.getRepository11import helper.getTaskByName12import helper.getTaskByType13import helper.getTaskByTypeAndName14import helper.getTasksDependsOn15import helper.hasTaskFinalizedByDependency16import helper.then17import io.kotest.assertions.throwables.shouldThrow18import io.kotest.core.spec.style.funSpec19import io.kotest.matchers.booleans.shouldBeFalse20import io.kotest.matchers.booleans.shouldBeTrue21import io.kotest.matchers.collections.shouldBeEmpty22import io.kotest.matchers.collections.shouldContain23import io.kotest.matchers.collections.shouldContainAll24import io.kotest.matchers.collections.shouldContainAnyOf25import io.kotest.matchers.nulls.shouldBeNull26import io.kotest.matchers.nulls.shouldNotBeNull27import io.kotest.matchers.shouldBe28import io.kotest.matchers.shouldNotBe29import io.kotest.matchers.string.shouldBeEmpty30import io.kotest.matchers.string.shouldContain31import io.kotest.matchers.string.shouldNotBeBlank32import io.kotest.matchers.types.shouldBeTypeOf33import io.opengood.gradle.ConfigPlugin34import io.opengood.gradle.constant.Archives35import io.opengood.gradle.constant.Artifacts36import io.opengood.gradle.constant.Boms37import io.opengood.gradle.constant.Configurations38import io.opengood.gradle.constant.Dependencies39import io.opengood.gradle.constant.Elements40import io.opengood.gradle.constant.GitHub41import io.opengood.gradle.constant.Jars42import io.opengood.gradle.constant.KotlinOptions43import io.opengood.gradle.constant.Plugins44import io.opengood.gradle.constant.Publications45import io.opengood.gradle.constant.Releases46import io.opengood.gradle.constant.Repositories47import io.opengood.gradle.constant.Signatures48import io.opengood.gradle.constant.Tasks49import io.opengood.gradle.constant.Tests50import io.opengood.gradle.constant.Versions51import io.opengood.gradle.enumeration.PackagingType52import io.opengood.gradle.enumeration.ProjectType53import io.opengood.gradle.enumeration.PublicationType54import io.opengood.gradle.enumeration.ScmProvider55import io.opengood.gradle.extension.openGood56import io.opengood.gradle.getExtension57import io.opengood.gradle.git58import io.opengood.gradle.isSnapshotVersion59import io.opengood.gradle.languageType60import io.spring.gradle.dependencymanagement.dsl.DependencyManagementExtension61import net.researchgate.release.GitAdapter62import net.researchgate.release.ReleaseExtension63import org.gradle.api.Project64import org.gradle.api.UnknownDomainObjectException65import org.gradle.api.UnknownTaskException66import org.gradle.api.artifacts.UnknownRepositoryException67import org.gradle.api.artifacts.repositories.MavenArtifactRepository68import org.gradle.api.internal.artifacts.dsl.LazyPublishArtifact69import org.gradle.api.internal.artifacts.publish.ArchivePublishArtifact70import org.gradle.api.internal.provider.ProviderInternal71import org.gradle.api.plugins.BasePluginExtension72import org.gradle.api.plugins.JavaPluginExtension73import org.gradle.api.plugins.UnknownPluginException74import org.gradle.api.publish.PublishingExtension75import org.gradle.api.publish.maven.MavenPublication76import org.gradle.api.publish.maven.internal.publication.DefaultMavenPom77import org.gradle.api.tasks.bundling.Jar78import org.gradle.api.tasks.compile.JavaCompile79import org.gradle.api.tasks.testing.Test80import org.gradle.api.tasks.wrapper.Wrapper81import org.gradle.api.tasks.wrapper.Wrapper.DistributionType82import org.gradle.language.jvm.tasks.ProcessResources83import org.gradle.plugins.signing.Sign84import org.gradle.plugins.signing.SigningExtension85import org.gradle.testing.jacoco.tasks.JacocoReport86import org.jetbrains.kotlin.gradle.tasks.KotlinCompile87import org.springframework.boot.gradle.dsl.SpringBootExtension88import org.springframework.boot.gradle.tasks.bundling.BootJar89import java.net.URI90fun applyPluginTest(project: Project) = funSpec {91 test("Applies plugin") {92 getPlugin(project, ConfigPlugin.PLUGIN_ID).shouldNotBeNull()93 getPlugin(project, ConfigPlugin.PLUGIN_ID).shouldBeTypeOf<ConfigPlugin>()94 getPlugin<ConfigPlugin>(project).shouldBeTypeOf<ConfigPlugin>()95 }96}97fun createExtensionTest(98 project: Project,99 projectType: ProjectType100) = funSpec {101 test("Creates extension") {102 with(project.openGood()) {103 shouldNotBeNull()104 with(main) {105 languageType shouldBe project.languageType106 main.projectType shouldBe projectType107 }108 with(features) {109 assertj.shouldBeTrue()110 jacksonKotlin.shouldBeTrue()111 junitJupiter.shouldBeTrue()112 kotest.shouldBeTrue()113 kotestSpring.shouldBeTrue()114 kotlinCoroutines.shouldBeTrue()115 lombok.shouldBeTrue()116 mockito.shouldBeTrue()117 mockk.shouldBeTrue()118 spring.shouldBeTrue()119 springMockk.shouldBeTrue()120 }121 with(test) {122 maxParallelForks shouldBe Tests.MAX_PARALLEL_FORKS123 with(frameworks) {124 java.shouldBeFalse()125 }126 }127 with(release) {128 afterReleaseBuildTasks shouldBe arrayOf(129 String.format(130 Tasks.PUBLISH_PUBLICATION,131 Publications.GITHUB_PUB_NAME,132 Repositories.GITHUB_PACKAGES_REPO_NAME133 ),134 String.format(135 Tasks.PUBLISH_PUBLICATION,136 Publications.OSS_PUB_NAME,137 Repositories.OSS_SNAPSHOTS_REPO_NAME138 )139 )140 requireBranch shouldBe Releases.REQUIRE_BRANCH141 pushToRemote shouldBe Releases.PUSH_TO_REMOTE142 }143 with(artifact) {144 name shouldBe project.name145 packaging shouldBe PackagingType.JAR146 description.shouldBeEmpty()147 uri shouldBe "${GitHub.OPENGOOD_ORG_URI}/${project.name}"148 publications shouldBe listOf(PublicationType.GITHUB, PublicationType.OSS)149 with(repo) {150 ossSnapshotsRepoUri shouldBe Repositories.OSS_SNAPSHOTS_REPO_URI151 ossStagingRepoUri shouldBe Repositories.OSS_STAGING_REPO_URI152 gitHubPackagesRepoUri shouldBe "${Repositories.GITHUB_PACKAGES_REPO_URI}/${GitHub.OPENGOOD_ORG_NAME}/${project.name}"153 }154 with(scm) {155 provider shouldBe ScmProvider.GIT156 connection shouldBe "${ScmProvider.PROTOCOL}:$provider:${GitHub.OPENGOOD_ORG_URI}/${project.name}"157 developerConnection shouldBe "${ScmProvider.PROTOCOL}:$provider:${GitHub.OPENGOOD_ORG_URI}/${project.name}"158 uri shouldBe "${GitHub.OPENGOOD_ORG_URI}/${project.name}"159 }160 with(license) {161 name shouldBe Artifacts.LICENSE_NAME162 uri shouldBe "${GitHub.OPENGOOD_ORG_URI}/${project.name}/${GitHub.BLOB_ENDPOINT}/${GitHub.DEFAULT_BRANCH_NAME}/${Artifacts.LICENSE_RESOURCE}"163 }164 with(developer) {165 id shouldBe Artifacts.DEVELOPER_ID166 name shouldBe Artifacts.DEVELOPER_NAME167 email shouldBe Artifacts.DEVELOPER_EMAIL168 }169 }170 }171 }172}173fun applyGroovyPluginTest(project: Project) = funSpec {174 test("Applies Groovy plugin") {175 getPlugin(project, Plugins.GROOVY).shouldNotBeNull()176 }177}178fun applyJavaPluginTest(project: Project) = funSpec {179 test("Applies Java plugin") {180 getPlugin(project, Plugins.JAVA).shouldNotBeNull()181 }182}183fun applyKotlinPluginsTest(project: Project) = funSpec {184 test("Applies Kotlin plugins") {185 getPlugin(project, Plugins.KOTLIN_JVM).shouldNotBeNull()186 getPlugin(project, Plugins.KOTLIN_ALL_OPEN).shouldNotBeNull()187 getPlugin(project, Plugins.KOTLIN_NO_ARG).shouldNotBeNull()188 }189}190fun applyCommonPluginsTest(project: Project) = funSpec {191 test("Applies common plugins") {192 getPlugin(project, Plugins.BASE).shouldNotBeNull()193 getPlugin(project, Plugins.IDEA).shouldNotBeNull()194 getPlugin(project, Plugins.JACOCO).shouldNotBeNull()195 getPlugin(project, Plugins.MAVEN_PUBLISH).shouldNotBeNull()196 getPlugin(project, Plugins.RELEASE).shouldNotBeNull()197 getPlugin(project, Plugins.SIGNING).shouldNotBeNull()198 getPlugin(project, Plugins.VERSIONS).shouldNotBeNull()199 }200}201fun applyLibraryPluginTest(project: Project) = funSpec {202 test("Applies library plugin") {203 getPlugin(project, Plugins.JAVA_LIBRARY).shouldNotBeNull()204 }205}206fun applySpringPluginsTest(project: Project) = funSpec {207 test("Applies Spring plugins") {208 getPlugin(project, Plugins.SPRING_BOOT).shouldNotBeNull()209 getPlugin(project, Plugins.SPRING_DEPENDENCY_MANAGEMENT).shouldNotBeNull()210 }211}212fun applyKotlinSpringPluginsTest(project: Project) = funSpec {213 test("Applies Kotlin Spring plugins") {214 getPlugin(project, Plugins.KOTLIN_SPRING).shouldNotBeNull()215 }216}217fun applyLombokPluginTest(project: Project) = funSpec {218 test("Applies Lombok plugin") {219 getPlugin(project, Plugins.LOMBOK).shouldNotBeNull()220 }221}222fun doNotApplyGroovyPluginTest(project: Project) = funSpec {223 test("Does not apply Groovy plugin") {224 shouldThrow<UnknownPluginException> { getPlugin(project, Plugins.GROOVY).shouldNotBeNull() }225 }226}227fun doNotApplyKotlinPluginsTest(project: Project) = funSpec {228 test("Does not apply Kotlin plugins") {229 shouldThrow<UnknownPluginException> { getPlugin(project, Plugins.KOTLIN_ALL_OPEN).shouldNotBeNull() }230 shouldThrow<UnknownPluginException> { getPlugin(project, Plugins.KOTLIN_JVM).shouldNotBeNull() }231 shouldThrow<UnknownPluginException> { getPlugin(project, Plugins.KOTLIN_NO_ARG).shouldNotBeNull() }232 }233}234fun doNotApplyLibraryPluginTest(project: Project) = funSpec {235 test("Does not apply library plugin") {236 shouldThrow<UnknownPluginException> { getPlugin(project, Plugins.JAVA_LIBRARY).shouldNotBeNull() }237 }238}239fun doNotApplyKotlinSpringPluginsTest(project: Project) = funSpec {240 test("Does not apply Kotlin Spring plugins") {241 shouldThrow<UnknownPluginException> { getPlugin(project, Plugins.KOTLIN_SPRING) }242 }243}244fun doNotApplyLombokPluginTest(project: Project) = funSpec {245 test("Does not apply Lombok plugin") {246 shouldThrow<UnknownPluginException> { getPlugin(project, Plugins.LOMBOK) }247 }248}249fun configureDependencyResolutionStrategyTest(project: Project) = funSpec {250 test("Configures dependency resolution strategy") {251 val implementationDependencies = getDependencies(project, Configurations.IMPLEMENTATION)252 val testImplementationDependencies = getDependencies(project, Configurations.TEST_IMPLEMENTATION)253 (implementationDependencies + testImplementationDependencies).forEach { dependency ->254 if (dependency.group == "org.jetbrains.kotlin") {255 dependency.version shouldBe Versions.KOTLIN256 }257 if (dependency.group == "org.jetbrains.kotlinx" && dependency.name == "kotlinx-coroutines-core") {258 dependency.version shouldBe Versions.KOTLIN_COROUTINES259 }260 }261 }262}263fun configureBootJarResolutionTest(project: Project) = funSpec {264 test("Configures boot jar resolution") {265 with(project.configurations) {266 val apiElements = named(Elements.API)267 val runtimeElements = named(Elements.RUNTIME)268 val jar = getTaskByTypeAndName<Jar>(project, Jars.JAR)269 val bootJar = getTaskByTypeAndName<BootJar>(project, Jars.BOOT_JAR)270 all {271 val elements = listOf(apiElements, runtimeElements)272 elements.forEach { element ->273 with(element.get().outgoing) {274 artifacts.forEach { artifact ->275 with(artifact as ArchivePublishArtifact) {276 archiveTask shouldNotBe jar277 archiveTask shouldBe bootJar278 }279 }280 }281 }282 }283 }284 }285}286fun doNotConfigureBootJarResolutionTest(project: Project) = funSpec {287 test("Does not configure boot jar resolution") {288 with(project.configurations) {289 val apiElements = named(Elements.API)290 val runtimeElements = named(Elements.RUNTIME)291 all {292 val elements = listOf(apiElements, runtimeElements)293 elements.forEach { element ->294 with(element.get().outgoing) {295 artifacts.forEach { artifact ->296 with(artifact as LazyPublishArtifact) {297 with(accessField<ProviderInternal<*>>("provider").toString()) {298 contains("task '${Jars.JAR}'").shouldBeTrue()299 contains("task '${Jars.BOOT_JAR}'").shouldBeFalse()300 }301 }302 }303 }304 }305 }306 }307 }308}309fun addRepositoriesTest(project: Project) = funSpec {310 test("Adds repositories") {311 with(project.repositories) {312 getRepository(project, mavenCentral().name).shouldNotBeNull()313 getRepository(project, gradlePluginPortal().name).shouldNotBeNull()314 getRepository(project, mavenLocal().name).shouldNotBeNull()315 }316 }317}318fun addGroovyDependenciesTest(project: Project) = funSpec {319 test("Adds Groovy dependencies") {320 getDependency(project, Configurations.IMPLEMENTATION, Dependencies.GROOVY).shouldNotBeNull()321 }322}323fun addKotlinDependenciesTest(project: Project) = funSpec {324 test("Adds Kotlin dependencies") {325 getDependency(project, Configurations.IMPLEMENTATION, Dependencies.KOTLIN_REFLECT).shouldNotBeNull()326 getDependency(project, Configurations.IMPLEMENTATION, Dependencies.KOTLIN_STD_LIB).shouldNotBeNull()327 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.KOTLIN_TEST).shouldNotBeNull()328 }329}330fun addAssertjDependenciesTest(project: Project) = funSpec {331 test("Adds AssertJ dependencies") {332 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.ASSERTJ).shouldNotBeNull()333 }334}335fun addJacksonKotlinDependenciesTest(project: Project) = funSpec {336 test("Adds Jackson Kotlin dependencies") {337 getDependency(project, Configurations.IMPLEMENTATION, Dependencies.JACKSON_KOTLIN).shouldNotBeNull()338 }339}340fun addJunitJupiterDependenciesTest(project: Project) = funSpec {341 test("Adds JUnit Jupiter dependencies") {342 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.JUNIT_JUPITER).shouldNotBeNull()343 }344}345fun addKotestDependenciesTest(project: Project) = funSpec {346 test("Adds Kotest dependencies") {347 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.KOTEST).shouldNotBeNull()348 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.KOTEST_ASSERTIONS).shouldNotBeNull()349 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.KOTEST_EXTENSIONS).shouldNotBeNull()350 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.KOTEST_PROPERTIES).shouldNotBeNull()351 }352}353fun addKotestSpringDependenciesTest(project: Project) = funSpec {354 test("Adds Kotest Spring dependencies") {355 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.KOTEST_SPRING).shouldNotBeNull()356 }357}358fun addKotlinCoroutinesDependenciesTest(project: Project) = funSpec {359 test("Adds Kotlin Coroutines dependencies") {360 getDependency(project, Configurations.IMPLEMENTATION, Dependencies.KOTLIN_COROUTINES).shouldNotBeNull()361 }362}363fun addLombokDependenciesTest(project: Project) = funSpec {364 test("Adds Lombok dependencies") {365 getDependency(project, Configurations.IMPLEMENTATION, Dependencies.LOMBOK).shouldNotBeNull()366 getDependency(project, Configurations.ANNOTATION_PROCESSOR, Dependencies.LOMBOK).shouldNotBeNull()367 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.LOMBOK).shouldNotBeNull()368 getDependency(project, Configurations.TEST_ANNOTATION_PROCESSOR, Dependencies.LOMBOK).shouldNotBeNull()369 }370}371fun addMockitoDependenciesTest(project: Project) = funSpec {372 test("Adds Mockito dependencies") {373 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.MOCKITO).shouldNotBeNull()374 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.MOCKITO_JUNIT_JUPITER).shouldNotBeNull()375 }376}377fun addMockkDependenciesTest(project: Project) = funSpec {378 test("Adds MockK dependencies") {379 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.MOCKK).shouldNotBeNull()380 }381}382fun addSpringDependenciesTest(project: Project) = funSpec {383 test("Adds Spring dependencies") {384 getDependency(385 project,386 Configurations.ANNOTATION_PROCESSOR,387 Dependencies.SPRING_BOOT_CONFIG_PROCESSOR388 ).shouldNotBeNull()389 getDependency(project, Configurations.IMPLEMENTATION, Dependencies.SPRING_BOOT_STARTER).shouldNotBeNull()390 getDependency(391 project,392 Configurations.TEST_IMPLEMENTATION,393 Dependencies.SPRING_BOOT_STARTER_TEST394 ).shouldNotBeNull()395 }396}397fun addSpringMockkDependenciesTest(project: Project) = funSpec {398 test("Adds Spring MockK dependencies") {399 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.SPRING_MOCKK).shouldNotBeNull()400 }401}402fun doNotAddGroovyDependenciesTest(project: Project) = funSpec {403 test("Does not add Groovy dependencies") {404 getDependency(project, Configurations.IMPLEMENTATION, Dependencies.GROOVY).shouldBeNull()405 }406}407fun doNotAddKotlinDependenciesTest(project: Project) = funSpec {408 test("Does not add Kotlin dependencies") {409 getDependency(project, Configurations.IMPLEMENTATION, Dependencies.KOTLIN_REFLECT).shouldBeNull()410 getDependency(project, Configurations.IMPLEMENTATION, Dependencies.KOTLIN_STD_LIB).shouldBeNull()411 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.KOTLIN_TEST).shouldBeNull()412 }413}414fun doNotAddAssertjDependenciesTest(project: Project) = funSpec {415 test("Does not add AssertJ dependencies") {416 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.ASSERTJ).shouldBeNull()417 }418}419fun doNotAddJacksonKotlinDependenciesTest(project: Project) = funSpec {420 test("Does not add Jackson Kotlin dependencies") {421 getDependency(project, Configurations.IMPLEMENTATION, Dependencies.JACKSON_KOTLIN).shouldBeNull()422 }423}424fun doNotAddJunitJupiterDependenciesTest(project: Project) = funSpec {425 test("Does not add JUnit Jupiter dependencies") {426 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.JUNIT_JUPITER).shouldBeNull()427 }428}429fun doNotAddKotestDependenciesTest(project: Project) = funSpec {430 test("Does not add Kotest dependencies") {431 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.KOTEST).shouldBeNull()432 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.KOTEST_ASSERTIONS).shouldBeNull()433 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.KOTEST_EXTENSIONS).shouldBeNull()434 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.KOTEST_PROPERTIES).shouldBeNull()435 }436}437fun doNotAddKotestSpringDependenciesTest(project: Project) = funSpec {438 test("Does not add Kotest Spring dependencies") {439 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.KOTEST_SPRING).shouldBeNull()440 }441}442fun doNotAddKotlinCoroutinesDependenciesTest(project: Project) = funSpec {443 test("Does not add Kotlin Coroutines dependencies") {444 getDependency(project, Configurations.IMPLEMENTATION, Dependencies.KOTLIN_COROUTINES).shouldBeNull()445 }446}447fun doNotAddLombokDependenciesTest(project: Project) = funSpec {448 test("Does not add Lombok dependencies") {449 getDependency(project, Configurations.IMPLEMENTATION, Dependencies.LOMBOK).shouldBeNull()450 getDependency(project, Configurations.ANNOTATION_PROCESSOR, Dependencies.LOMBOK).shouldBeNull()451 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.LOMBOK).shouldBeNull()452 getDependency(project, Configurations.TEST_ANNOTATION_PROCESSOR, Dependencies.LOMBOK).shouldBeNull()453 }454}455fun doNotAddMockitoDependenciesTest(project: Project) = funSpec {456 test("Does not add Mockito dependencies") {457 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.MOCKITO).shouldBeNull()458 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.MOCKITO_JUNIT_JUPITER).shouldBeNull()459 }460}461fun doNotAddMockkDependenciesTest(project: Project) = funSpec {462 test("Does not add MockK dependencies") {463 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.MOCKK).shouldBeNull()464 }465}466fun doNotAddSpringDependenciesTest(project: Project) = funSpec {467 test("Does not add Spring dependencies") {468 getDependency(469 project,470 Configurations.ANNOTATION_PROCESSOR,471 Dependencies.SPRING_BOOT_CONFIG_PROCESSOR472 ).shouldBeNull()473 getDependency(project, Configurations.IMPLEMENTATION, Dependencies.SPRING_BOOT_STARTER).shouldBeNull()474 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.SPRING_BOOT_STARTER_TEST).shouldBeNull()475 }476}477fun doNotAddSpringMockkDependenciesTest(project: Project) = funSpec {478 test("Does not add Spring MockK dependencies") {479 getDependency(project, Configurations.TEST_IMPLEMENTATION, Dependencies.SPRING_MOCKK).shouldBeNull()480 }481}482fun configureGradleWrapperTaskTest(project: Project) = funSpec {483 test("Configures Gradle Wrapper task") {484 val task = getTaskByType<Wrapper>(project)485 with(task) {486 shouldNotBeNull()487 distributionType shouldBe DistributionType.ALL488 }489 }490}491fun configureKotlinCompileTaskTest(project: Project) = funSpec {492 test("Configures Kotlin Compile task") {493 val task = getTaskByTypeAndName<KotlinCompile>(project, Tasks.COMPILE_KOTLIN)494 with(task) {495 shouldNotBeNull()496 kotlinOptions.freeCompilerArgs shouldBe KotlinOptions.FREE_COMPILER_ARGS497 kotlinOptions.jvmTarget shouldBe Versions.JAVA498 }499 }500}501fun configureJavaCompileTaskTest(project: Project) = funSpec {502 test("Configures Java Compile task") {503 val task = getTaskByTypeAndName<JavaCompile>(project, Tasks.COMPILE_JAVA)504 with(task) {505 shouldNotBeNull()506 sourceCompatibility shouldBe Versions.JAVA507 targetCompatibility shouldBe Versions.JAVA508 }509 }510}511fun configureProcessResourcesTaskTest(project: Project) = funSpec {512 test("Configures Process Resources task") {513 val task = getTaskByType<ProcessResources>(project)514 with(task) {515 shouldNotBeNull()516 destinationDir.absolutePath shouldContain "resources/main"517 }518 }519}520fun configureDependencyUpdatesTaskTest(project: Project) = funSpec {521 test("Configures Dependency Updates task") {522 val task = getTaskByTypeAndName<DependencyUpdatesTask>(project, Tasks.DEPENDENCY_UPDATES)523 with(task) {524 shouldNotBeNull()525 }526 }527}528fun configureTestTaskTest(project: Project) = funSpec {529 test("Configures Test task") {530 val task = getTaskByTypeAndName<Test>(project, Tasks.TEST)531 with(task) {532 shouldNotBeNull()533 enabled.shouldBeTrue()534 onlyIf.shouldNotBeNull()535 hasTaskFinalizedByDependency(task, Tasks.JACOCO_TEST_REPORT).shouldBeTrue()536 with(testLogging) {537 events shouldBe Tests.LOGGING_EVENTS538 exceptionFormat shouldBe Tests.EXCEPTION_FORMAT539 showCauses shouldBe Tests.SHOW_CAUSES540 showExceptions shouldBe Tests.SHOW_EXCEPTIONS541 showStackTraces shouldBe Tests.SHOW_STACK_TRACES542 }543 maxParallelForks shouldBe Tests.MAX_PARALLEL_FORKS544 systemProperties[Tests.INSTANCE_LIFECYCLE_SYS_PROP_NAME] shouldBe Tests.INSTANCE_LIFECYCLE_SYS_PROP_VALUE545 }546 }547}548fun configureJacocoTestReportTaskTest(project: Project) = funSpec {549 test("Configures Jacoco Test Report task") {550 val task = getTaskByTypeAndName<JacocoReport>(project, Tasks.JACOCO_TEST_REPORT)551 with(task) {552 shouldNotBeNull()553 with(reports) {554 shouldNotBeNull()555 xml.required.get().shouldBeTrue()556 html.required.get().shouldBeFalse()557 }558 }559 }560}561fun configureJarTaskTest(project: Project, isEnabled: Boolean) = funSpec {562 test("Configures Jar task") {563 val task = getTaskByTypeAndName<Jar>(project, Jars.JAR)564 with(task) {565 shouldNotBeNull()566 enabled shouldBe isEnabled567 archiveClassifier.get() shouldBe Archives.CLASSIFIER568 }569 }570}571fun configureBootJarTaskTest(project: Project, isEnabled: Boolean) = funSpec {572 test("Configures Boot Jar task") {573 val task = getTaskByTypeAndName<BootJar>(project, Jars.BOOT_JAR)574 with(task) {575 shouldNotBeNull()576 enabled shouldBe isEnabled577 }578 }579}580fun configureAfterReleaseBuildTaskTest(project: Project) = funSpec {581 test("Configures After Release Build task") {582 val task = getTaskByName(project, Tasks.AFTER_RELEASE_BUILD)583 with(task) {584 shouldNotBeNull()585 val afterReleaseBuildTasks = mutableListOf<Any>()586 with(project.openGood().artifact) {587 if (publications.contains(PublicationType.GITHUB)) {588 afterReleaseBuildTasks.add(589 String.format(590 Tasks.PUBLISH_PUBLICATION,591 Publications.GITHUB_PUB_NAME,592 Repositories.GITHUB_PACKAGES_REPO_NAME593 )594 )595 }596 if (publications.contains(PublicationType.OSS)) {597 afterReleaseBuildTasks.add(598 String.format(599 Tasks.PUBLISH_PUBLICATION,600 Publications.OSS_PUB_NAME,601 if (project.isSnapshotVersion) Repositories.OSS_SNAPSHOTS_REPO_NAME else Repositories.OSS_STAGING_REPO_NAME602 )603 )604 }605 }606 getTasksDependsOn(task).shouldContainAll(afterReleaseBuildTasks)607 }608 }609}610fun doNotConfigureAfterReleaseBuildTaskTest(project: Project) = funSpec {611 test("Does not configure After Release Build task") {612 val task = getTaskByName(project, Tasks.AFTER_RELEASE_BUILD)613 with(task) {614 shouldNotBeNull()615 val afterReleaseBuildTasks = mutableListOf<Any>()616 with(project.openGood().artifact) {617 if (publications.contains(PublicationType.GITHUB)) {618 afterReleaseBuildTasks.add(619 String.format(620 Tasks.PUBLISH_PUBLICATION,621 Publications.GITHUB_PUB_NAME,622 Repositories.GITHUB_PACKAGES_REPO_NAME623 )624 )625 }626 if (publications.contains(PublicationType.OSS)) {627 afterReleaseBuildTasks.add(628 String.format(629 Tasks.PUBLISH_PUBLICATION,630 Publications.OSS_PUB_NAME,631 if (project.isSnapshotVersion) Repositories.OSS_SNAPSHOTS_REPO_NAME else Repositories.OSS_STAGING_REPO_NAME632 )633 )634 }635 }636 dependsOn.shouldBeEmpty()637 }638 }639}640fun configureBasePluginExtensionTest(project: Project) = funSpec {641 test("Configures Base Plugin extension") {642 val extension = project.getExtension<BasePluginExtension>()643 with(extension) {644 shouldNotBeNull()645 archivesName.get() shouldBe project.name646 }647 }648}649fun configureDependencyManagementExtensionTest(project: Project) = funSpec {650 test("Configures Dependency Management extension") {651 val extension = project.getExtension<DependencyManagementExtension>()652 with(extension) {653 shouldNotBeNull()654 getMavenBom(extension, Boms.KOTLIN).shouldNotBeNull()655 }656 }657}658fun configureJavaExtensionTest(project: Project) = funSpec {659 test("Configures Java extension") {660 val extension = project.getExtension<JavaPluginExtension>()661 with(extension) {662 shouldNotBeNull()663 getTaskByName(project, Tasks.JAVADOC_JAR).shouldNotBeNull()664 getTaskByName(project, Tasks.SOURCES_JAR).shouldNotBeNull()665 }666 }667}668fun configureSpringBootExtensionTest(project: Project) = funSpec {669 test("Configures Spring Boot extension") {670 val extension = project.getExtension<SpringBootExtension>()671 with(extension) {672 shouldNotBeNull()673 }674 }675}676fun configureReleaseExtensionTest(project: Project) = funSpec {677 test("Configures Release extension") {678 val extension = project.getExtension<ReleaseExtension>()679 with(extension) {680 shouldNotBeNull()681 scmAdapters shouldContain GitAdapter::class.java682 preTagCommitMessage shouldBe Releases.PRE_TAG_COMMIT_MESSAGE683 newVersionCommitMessage shouldBe Releases.NEW_VERSION_COMMIT_MESSAGE684 versionPatterns shouldBe Releases.VERSION_PATTERNS685 with(git) {686 requireBranch = Releases.REQUIRE_BRANCH687 pushToRemote = Releases.PUSH_TO_REMOTE688 }689 }690 }691}692fun configurePublishingExtensionTest(project: Project) = funSpec {693 test("Configures Publishing extension") {694 val extension = project.getExtension<PublishingExtension>()695 with(extension) {696 shouldNotBeNull()697 val assertPublication = fun(publication: MavenPublication) {698 with(publication) {699 shouldNotBeNull()700 artifacts.shouldNotBeNull()701 with(pom as DefaultMavenPom) {702 groupId shouldBe project.group703 artifactId shouldBe project.name704 version shouldBe project.version705 name.get() shouldBe project.name706 packaging shouldBe PackagingType.JAR.toString()707 description.get() shouldBe ""708 url.get() shouldBe "${GitHub.OPENGOOD_ORG_URI}/${project.name}"709 with(scm) {710 connection.get() shouldBe "${ScmProvider.PROTOCOL}:${ScmProvider.GIT}:${GitHub.OPENGOOD_ORG_URI}/${project.name}"711 developerConnection.get() shouldBe "${ScmProvider.PROTOCOL}:${ScmProvider.GIT}:${GitHub.OPENGOOD_ORG_URI}/${project.name}"712 url.get() shouldBe "${GitHub.OPENGOOD_ORG_URI}/${project.name}"713 }714 with(licenses.first()) {715 name.get() shouldBe Artifacts.LICENSE_NAME716 url.get() shouldBe "${GitHub.OPENGOOD_ORG_URI}/${project.name}/${GitHub.BLOB_ENDPOINT}/${GitHub.DEFAULT_BRANCH_NAME}/${Artifacts.LICENSE_RESOURCE}"717 }718 with(developers.first()) {719 id.get() shouldBe Artifacts.DEVELOPER_ID720 name.get() shouldBe Artifacts.DEVELOPER_NAME721 email.get() shouldBe Artifacts.DEVELOPER_EMAIL722 }723 }724 }725 }726 val assertRepository = fun(727 repo: MavenArtifactRepository,728 repoName: String,729 repoUri: URI,730 hasCredentials: Boolean,731 publicationName: String?732 ) {733 with(repo) {734 shouldNotBeNull()735 name shouldBe repoName736 url shouldBe repoUri737 if (hasCredentials) {738 with(credentials) {739 username.shouldNotBeBlank()740 password.shouldNotBeBlank()741 }742 }743 }744 if (publicationName != null) {745 getTaskByName(746 project,747 String.format(Tasks.PUBLISH_PUBLICATION, publicationName, repoName)748 ).shouldNotBeNull()749 }750 }751 with(project.openGood().artifact) {752 assertRepository(753 getMavenRepository(extension, Repositories.LOCAL_REPO_NAME),754 Repositories.LOCAL_REPO_NAME,755 project.repositories.mavenLocal().url,756 false,757 null758 )759 if (publications.contains(PublicationType.GITHUB)) {760 assertPublication(getMavenPublication(extension, Publications.GITHUB_PUB_NAME))761 assertRepository(762 getMavenRepository(extension, Repositories.GITHUB_PACKAGES_REPO_NAME),763 Repositories.GITHUB_PACKAGES_REPO_NAME,764 URI("${Repositories.GITHUB_PACKAGES_REPO_URI}/${GitHub.OPENGOOD_ORG_NAME}/${project.name}"),765 true,766 Publications.GITHUB_PUB_NAME767 )768 }769 if (publications.contains(PublicationType.OSS)) {770 assertPublication(getMavenPublication(extension, Publications.OSS_PUB_NAME))771 val ossRepoName =772 ((project.isSnapshotVersion) then { Repositories.OSS_SNAPSHOTS_REPO_NAME })773 ?: Repositories.OSS_STAGING_REPO_NAME774 val ossRepoUri = ((project.isSnapshotVersion) then { Repositories.OSS_SNAPSHOTS_REPO_URI })775 ?: Repositories.OSS_STAGING_REPO_URI776 assertRepository(777 getMavenRepository(extension, ossRepoName),778 ossRepoName,779 URI(ossRepoUri),780 true,781 Publications.OSS_PUB_NAME782 )783 }784 }785 }786 }787}788fun configureSigningExtensionTest(project: Project) = funSpec {789 test("Configures Signing extension") {790 val extension = project.getExtension<SigningExtension>()791 with(extension) {792 shouldNotBeNull()793 val assertPublicationSigning = fun(task: Sign) {794 with(task) {795 shouldNotBeNull()796 signatures.map { it.toString() }.shouldContainAnyOf(797 "Signature ${Signatures.POM}",798 "Signature ${String.format(Signatures.JAR, project.name, project.version)}",799 "Signature ${String.format(Signatures.JAVADOC, project.name, project.version)}",800 "Signature ${String.format(Signatures.SOURCES, project.name, project.version)}"801 )802 }803 }804 with(project.openGood().artifact) {805 if (publications.contains(PublicationType.OSS)) {806 assertPublicationSigning(807 getTaskByTypeAndName(808 project,809 String.format(Tasks.SIGN_PUBLICATION, Publications.OSS_PUB_NAME)810 )811 )812 }813 }814 }815 }816}817fun doNotConfigureDependencyManagementExtensionTest(project: Project) = funSpec {818 test("Does not configure Dependency Management extension") {819 val extension = project.getExtension<DependencyManagementExtension>()820 with(extension) {821 shouldNotBeNull()822 getMavenBom(extension, Boms.KOTLIN).shouldBeNull()823 }824 }825}826fun doNotConfigurePublishingExtensionTest(project: Project) = funSpec {827 test("Does not configure Publishing extension") {828 val extension = project.getExtension<PublishingExtension>()829 with(extension) {830 shouldNotBeNull()831 shouldThrow<UnknownRepositoryException> { getMavenRepository(extension, Repositories.LOCAL_REPO_NAME) }832 shouldThrow<UnknownDomainObjectException> { getMavenPublication(extension, Publications.GITHUB_PUB_NAME) }833 shouldThrow<UnknownDomainObjectException> { getMavenPublication(extension, Publications.OSS_PUB_NAME) }834 shouldThrow<UnknownRepositoryException> {835 getMavenRepository(836 extension,837 Repositories.GITHUB_PACKAGES_REPO_NAME838 )839 }840 shouldThrow<UnknownRepositoryException> {841 getMavenRepository(842 extension,843 Repositories.OSS_SNAPSHOTS_REPO_NAME844 )845 }846 shouldThrow<UnknownRepositoryException> {847 getMavenRepository(848 extension,849 Repositories.OSS_STAGING_REPO_NAME850 )851 }852 }853 }854}855fun doNotConfigureSigningExtensionTest(project: Project) = funSpec {856 test("Does not configure Signing extension") {857 val extension = project.getExtension<SigningExtension>()858 with(extension) {859 shouldNotBeNull()860 shouldThrow<UnknownTaskException> {861 getTaskByTypeAndName<Sign>(862 project,863 String.format(Tasks.SIGN_PUBLICATION, Publications.GITHUB_PUB_NAME)864 )865 }866 shouldThrow<UnknownTaskException> {867 getTaskByTypeAndName<Sign>(868 project,869 String.format(Tasks.SIGN_PUBLICATION, Publications.OSS_PUB_NAME)870 )871 }872 }873 }874}...

Full Screen

Full Screen

matchers.kt

Source:matchers.kt Github

copy

Full Screen

1package io.kotest.matchers.collections2import io.kotest.assertions.show.show3import io.kotest.matchers.Matcher4import io.kotest.matchers.MatcherResult5import io.kotest.matchers.neverNullMatcher6import io.kotest.matchers.should7import io.kotest.matchers.shouldHave8import io.kotest.matchers.shouldNot9import kotlin.jvm.JvmName10fun <T> Iterable<T>.shouldContainOnlyNulls() = toList().shouldContainOnlyNulls()11fun <T> Array<T>.shouldContainOnlyNulls() = asList().shouldContainOnlyNulls()12fun <T> Collection<T>.shouldContainOnlyNulls() = this should containOnlyNulls()13fun <T> Iterable<T>.shouldNotContainOnlyNulls() = toList().shouldNotContainOnlyNulls()14fun <T> Array<T>.shouldNotContainOnlyNulls() = asList().shouldNotContainOnlyNulls()15fun <T> Collection<T>.shouldNotContainOnlyNulls() = this shouldNot containOnlyNulls()16fun <T> containOnlyNulls() = object : Matcher<Collection<T>> {17 override fun test(value: Collection<T>) =18 MatcherResult(19 value.all { it == null },20 "Collection should contain only nulls",21 "Collection should not contain only nulls"22 )23}24fun <T> Iterable<T>.shouldContainNull() = toList().shouldContainNull()25fun <T> Array<T>.shouldContainNull() = asList().shouldContainNull()26fun <T> Collection<T>.shouldContainNull() = this should containNull()27fun <T> Iterable<T>.shouldNotContainNull() = toList().shouldNotContainNull()28fun <T> Array<T>.shouldNotContainNull() = asList().shouldNotContainNull()29fun <T> Collection<T>.shouldNotContainNull() = this shouldNot containNull()30fun <T> containNull() = object : Matcher<Collection<T>> {31 override fun test(value: Collection<T>) =32 MatcherResult(33 value.any { it == null },34 "Collection should contain at least one null",35 "Collection should not contain any nulls"36 )37}38fun <T> Iterable<T>.shouldHaveElementAt(index: Int, element: T) = toList().shouldHaveElementAt(index, element)39fun <T> Array<T>.shouldHaveElementAt(index: Int, element: T) = asList().shouldHaveElementAt(index, element)40fun <T> List<T>.shouldHaveElementAt(index: Int, element: T) = this should haveElementAt(index, element)41fun <T> Iterable<T>.shouldNotHaveElementAt(index: Int, element: T) = toList().shouldNotHaveElementAt(index, element)42fun <T> Array<T>.shouldNotHaveElementAt(index: Int, element: T) = asList().shouldNotHaveElementAt(index, element)43fun <T> List<T>.shouldNotHaveElementAt(index: Int, element: T) = this shouldNot haveElementAt(index, element)44fun <T, L : List<T>> haveElementAt(index: Int, element: T) = object : Matcher<L> {45 override fun test(value: L) =46 MatcherResult(47 value[index] == element,48 { "Collection should contain ${element.show().value} at index $index" },49 { "Collection should not contain ${element.show().value} at index $index" }50 )51}52fun <T> Iterable<T>.shouldContainNoNulls() = toList().shouldContainNoNulls()53fun <T> Array<T>.shouldContainNoNulls() = asList().shouldContainNoNulls()54fun <T> Collection<T>.shouldContainNoNulls() = this should containNoNulls()55fun <T> Iterable<T>.shouldNotContainNoNulls() = toList().shouldNotContainNoNulls()56fun <T> Array<T>.shouldNotContainNoNulls() = asList().shouldNotContainNoNulls()57fun <T> Collection<T>.shouldNotContainNoNulls() = this shouldNot containNoNulls()58fun <T> containNoNulls() = object : Matcher<Collection<T>> {59 override fun test(value: Collection<T>) =60 MatcherResult(61 value.all { it != null },62 { "Collection should not contain nulls" },63 { "Collection should have at least one null" }64 )65}66infix fun <T> Array<T>.shouldNotContainExactlyInAnyOrder(expected: Array<T>) =67 asList().shouldNotContainExactlyInAnyOrder(expected.asList())68infix fun <T, C : Collection<T>> C?.shouldNotContainExactlyInAnyOrder(expected: C) =69 this shouldNot containExactlyInAnyOrder(expected)70fun <T, C : Collection<T>> C?.shouldNotContainExactlyInAnyOrder(vararg expected: T) =71 this shouldNot containExactlyInAnyOrder(*expected)72infix fun <T> Array<T>.shouldContainExactlyInAnyOrder(expected: Array<T>) =73 asList().shouldContainExactlyInAnyOrder(expected.asList())74infix fun <T, C : Collection<T>> C?.shouldContainExactlyInAnyOrder(expected: C) =75 this should containExactlyInAnyOrder(expected)76fun <T, C : Collection<T>> C?.shouldContainExactlyInAnyOrder(vararg expected: T) =77 this should containExactlyInAnyOrder(*expected)78fun <T> containExactlyInAnyOrder(vararg expected: T): Matcher<Collection<T>?> =79 containExactlyInAnyOrder(expected.asList())80/** Assert that a collection contains exactly the given values and nothing else, in any order. */81fun <T, C : Collection<T>> containExactlyInAnyOrder(expected: C): Matcher<C?> = neverNullMatcher { value ->82 val valueGroupedCounts: Map<T, Int> = value.groupBy { it }.mapValues { it.value.size }83 val expectedGroupedCounts: Map<T, Int> = expected.groupBy { it }.mapValues { it.value.size }84 val passed = expectedGroupedCounts.size == valueGroupedCounts.size85 && expectedGroupedCounts.all { valueGroupedCounts[it.key] == it.value }86 MatcherResult(87 passed,88 "Collection should contain ${expected.show().value} in any order, but was ${value.show().value}",89 "Collection should not contain exactly ${expected.show().value} in any order"90 )91}92infix fun <T : Comparable<T>> Iterable<T>.shouldHaveUpperBound(t: T) = toList().shouldHaveUpperBound(t)93infix fun <T : Comparable<T>> Array<T>.shouldHaveUpperBound(t: T) = asList().shouldHaveUpperBound(t)94infix fun <T : Comparable<T>, C : Collection<T>> C.shouldHaveUpperBound(t: T) = this should haveUpperBound(t)95fun <T : Comparable<T>, C : Collection<T>> haveUpperBound(t: T) = object : Matcher<C> {96 override fun test(value: C) = MatcherResult(97 value.all { it <= t },98 "Collection should have upper bound $t",99 "Collection should not have upper bound $t"100 )101}102infix fun <T : Comparable<T>> Iterable<T>.shouldHaveLowerBound(t: T) = toList().shouldHaveLowerBound(t)103infix fun <T : Comparable<T>> Array<T>.shouldHaveLowerBound(t: T) = asList().shouldHaveLowerBound(t)104infix fun <T : Comparable<T>, C : Collection<T>> C.shouldHaveLowerBound(t: T) = this should haveLowerBound(t)105fun <T : Comparable<T>, C : Collection<T>> haveLowerBound(t: T) = object : Matcher<C> {106 override fun test(value: C) = MatcherResult(107 value.all { t <= it },108 "Collection should have lower bound $t",109 "Collection should not have lower bound $t"110 )111}112fun <T> Iterable<T>.shouldBeUnique() = toList().shouldBeUnique()113fun <T> Array<T>.shouldBeUnique() = asList().shouldBeUnique()114fun <T> Collection<T>.shouldBeUnique() = this should beUnique()115fun <T> Iterable<T>.shouldNotBeUnique() = toList().shouldNotBeUnique()116fun <T> Array<T>.shouldNotBeUnique() = asList().shouldNotBeUnique()117fun <T> Collection<T>.shouldNotBeUnique() = this shouldNot beUnique()118fun <T> beUnique() = object : Matcher<Collection<T>> {119 override fun test(value: Collection<T>) = MatcherResult(120 value.toSet().size == value.size,121 "Collection should be Unique",122 "Collection should contain at least one duplicate element"123 )124}125fun <T> Iterable<T>.shouldContainDuplicates() = toList().shouldContainDuplicates()126fun <T> Array<T>.shouldContainDuplicates() = asList().shouldContainDuplicates()127fun <T> Collection<T>.shouldContainDuplicates() = this should containDuplicates()128fun <T> Iterable<T>.shouldNotContainDuplicates() = toList().shouldNotContainDuplicates()129fun <T> Array<T>.shouldNotContainDuplicates() = asList().shouldNotContainDuplicates()130fun <T> Collection<T>.shouldNotContainDuplicates() = this shouldNot containDuplicates()131fun <T> containDuplicates() = object : Matcher<Collection<T>> {132 override fun test(value: Collection<T>) = MatcherResult(133 value.toSet().size < value.size,134 "Collection should contain duplicates",135 "Collection should not contain duplicates"136 )137}138fun <T> beSortedWith(comparator: Comparator<in T>): Matcher<List<T>> = sortedWith(comparator)139fun <T> beSortedWith(cmp: (T, T) -> Int): Matcher<List<T>> = sortedWith(cmp)140fun <T> sortedWith(comparator: Comparator<in T>): Matcher<List<T>> = sortedWith { a, b ->141 comparator.compare(a, b)142}143fun <T> sortedWith(cmp: (T, T) -> Int): Matcher<List<T>> = object : Matcher<List<T>> {144 override fun test(value: List<T>): MatcherResult {145 val failure = value.withIndex().firstOrNull { (i, it) -> i != value.lastIndex && cmp(it, value[i + 1]) > 0 }146 val snippet = value.joinToString(",", limit = 10)147 val elementMessage = when (failure) {148 null -> ""149 else -> ". Element ${failure.value} at index ${failure.index} shouldn't precede element ${value[failure.index + 1]}"150 }151 return MatcherResult(152 failure == null,153 "List [$snippet] should be sorted$elementMessage",154 "List [$snippet] should not be sorted"155 )156 }157}158fun <T : Comparable<T>> Iterable<T>.shouldBeSorted() = toList().shouldBeSorted()159fun <T : Comparable<T>> Array<T>.shouldBeSorted() = asList().shouldBeSorted()160fun <T : Comparable<T>> List<T>.shouldBeSorted() = this should beSorted<T>()161fun <T : Comparable<T>> Iterable<T>.shouldNotBeSorted() = toList().shouldNotBeSorted()162fun <T : Comparable<T>> Array<T>.shouldNotBeSorted() = asList().shouldNotBeSorted()163fun <T : Comparable<T>> List<T>.shouldNotBeSorted() = this shouldNot beSorted<T>()164infix fun <T> Iterable<T>.shouldBeSortedWith(comparator: Comparator<in T>) = toList().shouldBeSortedWith(comparator)165infix fun <T> Array<T>.shouldBeSortedWith(comparator: Comparator<in T>) = asList().shouldBeSortedWith(comparator)166infix fun <T> List<T>.shouldBeSortedWith(comparator: Comparator<in T>) = this should beSortedWith(comparator)167infix fun <T> Iterable<T>.shouldNotBeSortedWith(comparator: Comparator<in T>) = toList().shouldNotBeSortedWith(comparator)168infix fun <T> Array<T>.shouldNotBeSortedWith(comparator: Comparator<in T>) = asList().shouldNotBeSortedWith(comparator)169infix fun <T> List<T>.shouldNotBeSortedWith(comparator: Comparator<in T>) = this shouldNot beSortedWith(comparator)170infix fun <T> Iterable<T>.shouldBeSortedWith(cmp: (T, T) -> Int) = toList().shouldBeSortedWith(cmp)171infix fun <T> Array<T>.shouldBeSortedWith(cmp: (T, T) -> Int) = asList().shouldBeSortedWith(cmp)172infix fun <T> List<T>.shouldBeSortedWith(cmp: (T, T) -> Int) = this should beSortedWith(cmp)173infix fun <T> Iterable<T>.shouldNotBeSortedWith(cmp: (T, T) -> Int) = toList().shouldNotBeSortedWith(cmp)174infix fun <T> Array<T>.shouldNotBeSortedWith(cmp: (T, T) -> Int) = asList().shouldNotBeSortedWith(cmp)175infix fun <T> List<T>.shouldNotBeSortedWith(cmp: (T, T) -> Int) = this shouldNot beSortedWith(cmp)176fun <T : Comparable<T>> Iterable<T>.shouldBeMonotonicallyIncreasing() = toList().shouldBeMonotonicallyIncreasing()177fun <T : Comparable<T>> Array<T>.shouldBeMonotonicallyIncreasing() = asList().shouldBeMonotonicallyIncreasing()178fun <T : Comparable<T>> List<T>.shouldBeMonotonicallyIncreasing() = this should beMonotonicallyIncreasing<T>()179fun <T : Comparable<T>> Iterable<T>.shouldNotBeMonotonicallyIncreasing() = toList().shouldNotBeMonotonicallyIncreasing()180fun <T : Comparable<T>> Array<T>.shouldNotBeMonotonicallyIncreasing() = asList().shouldNotBeMonotonicallyIncreasing()181fun <T : Comparable<T>> List<T>.shouldNotBeMonotonicallyIncreasing() = this shouldNot beMonotonicallyIncreasing<T>()182fun <T> List<T>.shouldBeMonotonicallyIncreasingWith(comparator: Comparator<in T>) =183 this should beMonotonicallyIncreasingWith(comparator)184fun <T> Iterable<T>.shouldBeMonotonicallyIncreasingWith(comparator: Comparator<in T>) =185 toList().shouldBeMonotonicallyIncreasingWith(comparator)186fun <T> Array<T>.shouldBeMonotonicallyIncreasingWith(comparator: Comparator<in T>) =187 asList().shouldBeMonotonicallyIncreasingWith(comparator)188fun <T> List<T>.shouldNotBeMonotonicallyIncreasingWith(comparator: Comparator<in T>) =189 this shouldNot beMonotonicallyIncreasingWith(comparator)190fun <T> Iterable<T>.shouldNotBeMonotonicallyIncreasingWith(comparator: Comparator<in T>) =191 toList().shouldNotBeMonotonicallyIncreasingWith(comparator)192fun <T> Array<T>.shouldNotBeMonotonicallyIncreasingWith(comparator: Comparator<in T>) =193 asList().shouldNotBeMonotonicallyIncreasingWith(comparator)194fun <T : Comparable<T>> Iterable<T>.shouldBeMonotonicallyDecreasing() = toList().shouldBeMonotonicallyDecreasing()195fun <T : Comparable<T>> Array<T>.shouldBeMonotonicallyDecreasing() = asList().shouldBeMonotonicallyDecreasing()196fun <T : Comparable<T>> List<T>.shouldBeMonotonicallyDecreasing() = this should beMonotonicallyDecreasing<T>()197fun <T : Comparable<T>> Iterable<T>.shouldNotBeMonotonicallyDecreasing() = toList().shouldNotBeMonotonicallyDecreasing()198fun <T : Comparable<T>> Array<T>.shouldNotBeMonotonicallyDecreasing() = asList().shouldNotBeMonotonicallyDecreasing()199fun <T : Comparable<T>> List<T>.shouldNotBeMonotonicallyDecreasing() = this shouldNot beMonotonicallyDecreasing<T>()200fun <T> List<T>.shouldBeMonotonicallyDecreasingWith(comparator: Comparator<in T>) =201 this should beMonotonicallyDecreasingWith(comparator)202fun <T> Iterable<T>.shouldBeMonotonicallyDecreasingWith(comparator: Comparator<in T>) =203 toList().shouldBeMonotonicallyDecreasingWith(comparator)204fun <T> Array<T>.shouldBeMonotonicallyDecreasingWith(comparator: Comparator<in T>) =205 asList().shouldBeMonotonicallyDecreasingWith(comparator)206fun <T> List<T>.shouldNotBeMonotonicallyDecreasingWith(comparator: Comparator<in T>) =207 this shouldNot beMonotonicallyDecreasingWith(comparator)208fun <T> Iterable<T>.shouldNotBeMonotonicallyDecreasingWith(comparator: Comparator<in T>) =209 toList().shouldNotBeMonotonicallyDecreasingWith(comparator)210fun <T> Array<T>.shouldNotBeMonotonicallyDecreasingWith(comparator: Comparator<in T>) =211 asList().shouldNotBeMonotonicallyDecreasingWith(comparator)212fun <T : Comparable<T>> Iterable<T>.shouldBeStrictlyIncreasing() = toList().shouldBeStrictlyIncreasing()213fun <T : Comparable<T>> Array<T>.shouldBeStrictlyIncreasing() = asList().shouldBeStrictlyIncreasing()214fun <T : Comparable<T>> List<T>.shouldBeStrictlyIncreasing() = this should beStrictlyIncreasing<T>()215fun <T : Comparable<T>> Iterable<T>.shouldNotBeStrictlyIncreasing() = toList().shouldNotBeStrictlyIncreasing()216fun <T : Comparable<T>> Array<T>.shouldNotBeStrictlyIncreasing() = asList().shouldNotBeStrictlyIncreasing()217fun <T : Comparable<T>> List<T>.shouldNotBeStrictlyIncreasing() = this shouldNot beStrictlyIncreasing<T>()218fun <T> List<T>.shouldBeStrictlyIncreasingWith(comparator: Comparator<in T>) =219 this should beStrictlyIncreasingWith(comparator)220fun <T> Iterable<T>.shouldBeStrictlyIncreasingWith(comparator: Comparator<in T>) =221 toList().shouldBeStrictlyIncreasingWith(comparator)222fun <T> Array<T>.shouldBeStrictlyIncreasingWith(comparator: Comparator<in T>) =223 asList().shouldBeStrictlyIncreasingWith(comparator)224fun <T> List<T>.shouldNotBeStrictlyIncreasingWith(comparator: Comparator<in T>) =225 this shouldNot beStrictlyIncreasingWith(comparator)226fun <T> Iterable<T>.shouldNotBeStrictlyIncreasingWith(comparator: Comparator<in T>) =227 toList().shouldNotBeStrictlyIncreasingWith(comparator)228fun <T> Array<T>.shouldNotBeStrictlyIncreasingWith(comparator: Comparator<in T>) =229 asList().shouldNotBeStrictlyIncreasingWith(comparator)230fun <T : Comparable<T>> Iterable<T>.shouldBeStrictlyDecreasing() = toList().shouldBeStrictlyDecreasing()231fun <T : Comparable<T>> List<T>.shouldBeStrictlyDecreasing() = this should beStrictlyDecreasing<T>()232fun <T : Comparable<T>> Iterable<T>.shouldNotBeStrictlyDecreasing() = toList().shouldNotBeStrictlyDecreasing()233fun <T : Comparable<T>> List<T>.shouldNotBeStrictlyDecreasing() = this shouldNot beStrictlyDecreasing<T>()234fun <T> List<T>.shouldBeStrictlyDecreasingWith(comparator: Comparator<in T>) =235 this should beStrictlyDecreasingWith(comparator)236fun <T> Iterable<T>.shouldBeStrictlyDecreasingWith(comparator: Comparator<in T>) =237 toList().shouldBeStrictlyDecreasingWith(comparator)238fun <T> Array<T>.shouldBeStrictlyDecreasingWith(comparator: Comparator<in T>) =239 asList().shouldBeStrictlyDecreasingWith(comparator)240fun <T> List<T>.shouldNotBeStrictlyDecreasingWith(comparator: Comparator<in T>) =241 this shouldNot beStrictlyDecreasingWith(comparator)242fun <T> Iterable<T>.shouldNotBeStrictlyDecreasingWith(comparator: Comparator<in T>) =243 toList().shouldNotBeStrictlyDecreasingWith(comparator)244fun <T> Array<T>.shouldNotBeStrictlyDecreasingWith(comparator: Comparator<in T>) =245 asList().shouldNotBeStrictlyDecreasingWith(comparator)246infix fun <T> Iterable<T>.shouldHaveSingleElement(t: T) = toList().shouldHaveSingleElement(t)247infix fun <T> Array<T>.shouldHaveSingleElement(t: T) = asList().shouldHaveSingleElement(t)248infix fun <T> Iterable<T>.shouldHaveSingleElement(p: (T) -> Boolean) = toList().shouldHaveSingleElement(p)249infix fun <T> Array<T>.shouldHaveSingleElement(p: (T) -> Boolean) = asList().shouldHaveSingleElement(p)250infix fun <T> Collection<T>.shouldHaveSingleElement(t: T) = this should singleElement(t)251infix fun <T> Collection<T>.shouldHaveSingleElement(p: (T) -> Boolean) = this should singleElement(p)252infix fun <T> Iterable<T>.shouldNotHaveSingleElement(t: T) = toList().shouldNotHaveSingleElement(t)253infix fun <T> Array<T>.shouldNotHaveSingleElement(t: T) = asList().shouldNotHaveSingleElement(t)254infix fun <T> Collection<T>.shouldNotHaveSingleElement(t: T) = this shouldNot singleElement(t)255infix fun <T> Iterable<T>.shouldHaveSize(size: Int) = toList().shouldHaveSize(size)256infix fun <T> Array<T>.shouldHaveSize(size: Int) = asList().shouldHaveSize(size)257infix fun <T> Collection<T>.shouldHaveSize(size: Int) = this should haveSize(size = size)258infix fun <T> Iterable<T>.shouldNotHaveSize(size: Int) = toList().shouldNotHaveSize(size)259infix fun <T> Array<T>.shouldNotHaveSize(size: Int) = asList().shouldNotHaveSize(size)260infix fun <T> Collection<T>.shouldNotHaveSize(size: Int) = this shouldNot haveSize(size)261/**262 * Verifies this collection contains only one element263 *264 * This assertion is an alias to `collection shouldHaveSize 1`. This will pass if the collection have exactly one element265 * (definition of a Singleton Collection)266 *267 * ```268 * listOf(1).shouldBeSingleton() // Assertion passes269 * listOf(1, 2).shouldBeSingleton() // Assertion fails270 * ```271 *272 * @see [shouldHaveSize]273 * @see [shouldNotBeSingleton]274 * @see [shouldHaveSingleElement]275 */276fun <T> Collection<T>.shouldBeSingleton() = this shouldHaveSize 1277fun <T> Iterable<T>.shouldBeSingleton() = toList().shouldBeSingleton()278fun <T> Array<T>.shouldBeSingleton() = asList().shouldBeSingleton()279inline fun <T> Collection<T>.shouldBeSingleton(fn: (T) -> Unit) {280 this.shouldBeSingleton()281 fn(this.first())282}283inline fun <T> Iterable<T>.shouldBeSingleton(fn: (T) -> Unit) {284 toList().shouldBeSingleton(fn)285}286inline fun <T> Array<T>.shouldBeSingleton(fn: (T) -> Unit) {287 asList().shouldBeSingleton(fn)288}289/**290 * Verifies this collection doesn't contain only one element291 *292 * This assertion is an alias to `collection shouldNotHaveSize 1`. This will pass if the collection doesn't have exactly one element293 * (definition of a Singleton Collection)294 *295 * ```296 * listOf(1, 2).shouldNotBeSingleton() // Assertion passes297 * listOf<Int>().shouldNotBeSingleton() // Assertion passes298 * listOf(1).shouldNotBeSingleton() // Assertion fails299 * ```300 *301 * @see [shouldNotHaveSize]302 * @see [shouldBeSingleton]303 * @see [shouldNotHaveSingleElement]304 */305fun <T> Collection<T>.shouldNotBeSingleton() = this shouldNotHaveSize 1306fun <T> Iterable<T>.shouldNotBeSingleton() = toList().shouldNotBeSingleton()307fun <T> Array<T>.shouldNotBeSingleton() = asList().shouldNotBeSingleton()308infix fun <T, U> Iterable<T>.shouldBeLargerThan(other: Collection<U>) = toList().shouldBeLargerThan(other)309infix fun <T, U> Array<T>.shouldBeLargerThan(other: Collection<U>) = asList().shouldBeLargerThan(other)310infix fun <T, U> Iterable<T>.shouldBeLargerThan(other: Iterable<U>) = toList().shouldBeLargerThan(other.toList())311infix fun <T, U> Array<T>.shouldBeLargerThan(other: Array<U>) = asList().shouldBeLargerThan(other.asList())312infix fun <T, U> Collection<T>.shouldBeLargerThan(other: Collection<U>) = this should beLargerThan(other)313fun <T, U> beLargerThan(other: Collection<U>) = object : Matcher<Collection<T>> {314 override fun test(value: Collection<T>) = MatcherResult(315 value.size > other.size,316 "Collection of size ${value.size} should be larger than collection of size ${other.size}",317 "Collection of size ${value.size} should not be larger than collection of size ${other.size}"318 )319}320infix fun <T, U> Iterable<T>.shouldBeSmallerThan(other: Collection<U>) = toList().shouldBeSmallerThan(other)321infix fun <T, U> Array<T>.shouldBeSmallerThan(other: Collection<U>) = asList().shouldBeSmallerThan(other)322infix fun <T, U> Iterable<T>.shouldBeSmallerThan(other: Iterable<U>) = toList().shouldBeSmallerThan(other.toList())323infix fun <T, U> Array<T>.shouldBeSmallerThan(other: Array<U>) = asList().shouldBeSmallerThan(other.asList())324infix fun <T, U> Collection<T>.shouldBeSmallerThan(other: Collection<U>) = this should beSmallerThan(other)325fun <T, U> beSmallerThan(other: Collection<U>) = object : Matcher<Collection<T>> {326 override fun test(value: Collection<T>) = MatcherResult(327 value.size < other.size,328 "Collection of size ${value.size} should be smaller than collection of size ${other.size}",329 "Collection of size ${value.size} should not be smaller than collection of size ${other.size}"330 )331}332infix fun <T, U> Iterable<T>.shouldBeSameSizeAs(other: Collection<U>) = toList().shouldBeSameSizeAs(other)333infix fun <T, U> Array<T>.shouldBeSameSizeAs(other: Collection<U>) = asList().shouldBeSameSizeAs(other)334infix fun <T, U> Iterable<T>.shouldBeSameSizeAs(other: Iterable<U>) = toList().shouldBeSameSizeAs(other.toList())335infix fun <T, U> Array<T>.shouldBeSameSizeAs(other: Array<U>) = asList().shouldBeSameSizeAs(other.asList())336infix fun <T, U> Collection<T>.shouldBeSameSizeAs(other: Collection<U>) = this should beSameSizeAs(other)337fun <T, U> beSameSizeAs(other: Collection<U>) = object : Matcher<Collection<T>> {338 override fun test(value: Collection<T>) = MatcherResult(339 value.size == other.size,340 "Collection of size ${value.size} should be the same size as collection of size ${other.size}",341 "Collection of size ${value.size} should not be the same size as collection of size ${other.size}"342 )343}344infix fun <T> Iterable<T>.shouldHaveAtLeastSize(n: Int) = toList().shouldHaveAtLeastSize(n)345infix fun <T> Array<T>.shouldHaveAtLeastSize(n: Int) = asList().shouldHaveAtLeastSize(n)346infix fun <T> Collection<T>.shouldHaveAtLeastSize(n: Int) = this shouldHave atLeastSize(n)347fun <T> atLeastSize(n: Int) = object : Matcher<Collection<T>> {348 override fun test(value: Collection<T>) = MatcherResult(349 value.size >= n,350 "Collection should contain at least $n elements",351 "Collection should contain less than $n elements"352 )353}354infix fun <T> Iterable<T>.shouldHaveAtMostSize(n: Int) = toList().shouldHaveAtMostSize(n)355infix fun <T> Array<T>.shouldHaveAtMostSize(n: Int) = asList().shouldHaveAtMostSize(n)356infix fun <T> Collection<T>.shouldHaveAtMostSize(n: Int) = this shouldHave atMostSize(n)357fun <T> atMostSize(n: Int) = object : Matcher<Collection<T>> {358 override fun test(value: Collection<T>) = MatcherResult(359 value.size <= n,360 "Collection should contain at most $n elements",361 "Collection should contain more than $n elements"362 )363}364infix fun <T> Iterable<T>.shouldExist(p: (T) -> Boolean) = toList().shouldExist(p)365infix fun <T> Array<T>.shouldExist(p: (T) -> Boolean) = asList().shouldExist(p)366infix fun <T> Collection<T>.shouldExist(p: (T) -> Boolean) = this should exist(p)367fun <T> exist(p: (T) -> Boolean) = object : Matcher<Collection<T>> {368 override fun test(value: Collection<T>) = MatcherResult(369 value.any { p(it) },370 "Collection should contain an element that matches the predicate $p",371 "Collection should not contain an element that matches the predicate $p"372 )373}374fun <T> Iterable<T>.shouldExistInOrder(vararg ps: (T) -> Boolean) = toList().shouldExistInOrder(ps.toList())375fun <T> Array<T>.shouldExistInOrder(vararg ps: (T) -> Boolean) = asList().shouldExistInOrder(ps.toList())376fun <T> List<T>.shouldExistInOrder(vararg ps: (T) -> Boolean) = this.shouldExistInOrder(ps.toList())377infix fun <T> Iterable<T>.shouldExistInOrder(expected: List<(T) -> Boolean>) = toList().shouldExistInOrder(expected)378infix fun <T> Array<T>.shouldExistInOrder(expected: List<(T) -> Boolean>) = asList().shouldExistInOrder(expected)379infix fun <T> List<T>.shouldExistInOrder(expected: List<(T) -> Boolean>) = this should existInOrder(expected)380infix fun <T> Iterable<T>.shouldNotExistInOrder(expected: Iterable<(T) -> Boolean>) = toList().shouldNotExistInOrder(expected.toList())381infix fun <T> Array<T>.shouldNotExistInOrder(expected: Array<(T) -> Boolean>) = asList().shouldNotExistInOrder(expected.asList())382infix fun <T> Iterable<T>.shouldNotExistInOrder(expected: List<(T) -> Boolean>) = toList().shouldNotExistInOrder(expected)383infix fun <T> Array<T>.shouldNotExistInOrder(expected: List<(T) -> Boolean>) = asList().shouldNotExistInOrder(expected)384infix fun <T> List<T>.shouldNotExistInOrder(expected: List<(T) -> Boolean>) = this shouldNot existInOrder(expected)385fun <T> Iterable<T>.shouldBeEmpty() = toList().shouldBeEmpty()386fun <T> Array<T>.shouldBeEmpty() = asList().shouldBeEmpty()387fun <T> Collection<T>.shouldBeEmpty() = this should beEmpty()388fun <T> Iterable<T>.shouldNotBeEmpty() = toList().shouldNotBeEmpty()389fun <T> Array<T>.shouldNotBeEmpty() = asList().shouldNotBeEmpty()390fun <T> Collection<T>.shouldNotBeEmpty() = this shouldNot beEmpty()391fun <T> Iterable<T>.shouldContainAnyOf(vararg ts: T) = toList().shouldContainAnyOf(ts)392fun <T> Array<T>.shouldContainAnyOf(vararg ts: T) = asList().shouldContainAnyOf(ts)393fun <T> Collection<T>.shouldContainAnyOf(vararg ts: T) = this should containAnyOf(ts.asList())394fun <T> Iterable<T>.shouldNotContainAnyOf(vararg ts: T) = toList().shouldNotContainAnyOf(ts)395fun <T> Array<T>.shouldNotContainAnyOf(vararg ts: T) = asList().shouldNotContainAnyOf(ts)396fun <T> Collection<T>.shouldNotContainAnyOf(vararg ts: T) = this shouldNot containAnyOf(ts.asList())397infix fun <T> Iterable<T>.shouldContainAnyOf(ts: Collection<T>) = toList().shouldContainAnyOf(ts)398infix fun <T> Array<T>.shouldContainAnyOf(ts: Collection<T>) = asList().shouldContainAnyOf(ts)399infix fun <T> Collection<T>.shouldContainAnyOf(ts: Collection<T>) = this should containAnyOf(ts)400infix fun <T> Iterable<T>.shouldNotContainAnyOf(ts: Collection<T>) = toList().shouldNotContainAnyOf(ts)401infix fun <T> Array<T>.shouldNotContainAnyOf(ts: Collection<T>) = asList().shouldNotContainAnyOf(ts)402infix fun <T> Collection<T>.shouldNotContainAnyOf(ts: Collection<T>) = this shouldNot containAnyOf(ts)403fun <T> containAnyOf(ts: Collection<T>) = object : Matcher<Collection<T>> {404 override fun test(value: Collection<T>): MatcherResult {405 if (ts.isEmpty()) throwEmptyCollectionError()406 return MatcherResult(407 ts.any { it in value },408 { "Collection should contain any of ${ts.joinToString(separator = ", ", limit = 10) { it.show().value }}" },409 { "Collection should not contain any of ${ts.joinToString(separator = ", ", limit = 10) { it.show().value }}" }410 )411 }412}413/**414 * Verifies that this instance is in [collection]415 *416 * Assertion to check that this instance is in [collection]. This assertion checks by reference, and not by value,417 * therefore the exact instance must be in [collection], or this will fail.418 *419 * An empty collection will always fail. If you need to check for empty collection, use [Collection.shouldBeEmpty]420 *421 * @see [shouldNotBeOneOf]422 * @see [beOneOf]423 */424infix fun <T> T.shouldBeOneOf(collection: Collection<T>) = this should beOneOf(collection)425/**426 * Verifies that this instance is NOT in [collection]427 *428 * Assertion to check that this instance is not in [collection]. This assertion checks by reference, and not by value,429 * therefore the exact instance must not be in [collection], or this will fail.430 *431 * An empty collection will always fail. If you need to check for empty collection, use [Collection.shouldBeEmpty]432 *433 * @see [shouldBeOneOf]434 * @see [beOneOf]435 */436infix fun <T> T.shouldNotBeOneOf(collection: Collection<T>) = this shouldNot beOneOf(collection)437/**438 * Verifies that this instance is any of [any]439 *440 * Assertion to check that this instance is any of [any]. This assertion checks by reference, and not by value,441 * therefore the exact instance must be in [any], or this will fail.442 *443 * An empty collection will always fail. If you need to check for empty collection, use [Collection.shouldBeEmpty]444 *445 * @see [shouldNotBeOneOf]446 * @see [beOneOf]447 */448fun <T> T.shouldBeOneOf(vararg any: T) = this should beOneOf(any.toList())449/**450 * Verifies that this instance is NOT any of [any]451 *452 * Assertion to check that this instance is not any of [any]. This assertion checks by reference, and not by value,453 * therefore the exact instance must not be in [any], or this will fail.454 *455 * An empty collection will always fail. If you need to check for empty collection, use [Collection.shouldBeEmpty]456 *457 * @see [shouldNotBeOneOf]458 * @see [beOneOf]459 */460fun <T> T.shouldNotBeOneOf(vararg any: T) = this shouldNot beOneOf(any.toList())461/**462 * Matcher that verifies that this instance is in [collection]463 *464 * Assertion to check that this instance is in [collection]. This matcher checks by reference, and not by value,465 * therefore the exact instance must be in [collection], or this will fail.466 *467 * An empty collection will always fail. If you need to check for empty collection, use [Collection.shouldBeEmpty]468 *469 * @see [shouldBeOneOf]470 * @see [shouldNotBeOneOf]471 */472fun <T> beOneOf(collection: Collection<T>) = object : Matcher<T> {473 override fun test(value: T): MatcherResult {474 if (collection.isEmpty()) throwEmptyCollectionError()475 val match = collection.any { it === value }476 return MatcherResult(477 match,478 "Collection should contain the instance of value, but doesn't.",479 "Collection should not contain the instance of value, but does."480 )481 }482}483/**484 * Verifies that this element is in [collection] by comparing value485 *486 * Assertion to check that this element is in [collection]. This assertion checks by value, and not by reference,487 * therefore even if the exact instance is not in [collection] but another instance with same value is present, the488 * test will pass.489 *490 * An empty collection will always fail. If you need to check for empty collection, use [Collection.shouldBeEmpty]491 *492 * @see [shouldNotBeIn]493 * @see [beIn]494 */495infix fun <T> T.shouldBeIn(collection: Collection<T>) = this should beIn(collection)496/**497 * Verifies that this element is NOT any of [collection]498 *499 * Assertion to check that this element is not any of [collection]. This assertion checks by value, and not by reference,500 * therefore any instance with same value must not be in [collection], or this will fail.501 *502 * An empty collection will always fail. If you need to check for empty collection, use [Collection.shouldBeEmpty]503 *504 * @see [shouldNotBeIn]505 * @see [beIn]506 */507infix fun <T> T.shouldNotBeIn(collection: Collection<T>) = this shouldNot beIn(collection.toList())508/**509 * Verifies that this element is any of [any] by comparing value510 *511 * Assertion to check that this element is any of [any]. This assertion checks by value, and not by reference,512 * therefore even if the exact instance is not any of [any] but another instance with same value is present, the513 * test will pass.514 *515 * An empty collection will always fail. If you need to check for empty collection, use [Collection.shouldBeEmpty]516 *517 * @see [shouldNotBeIn]518 * @see [beIn]519 */520fun <T> T.shouldBeIn(vararg any: T) = this should beIn(any.toList())521/**522 * Verifies that this element is NOT any of [any]523 *524 * Assertion to check that this element is not any of [any]. This assertion checks by value, and not by reference,525 * therefore any instance with same value must not be in [any], or this will fail.526 *527 * An empty collection will always fail. If you need to check for empty collection, use [Collection.shouldBeEmpty]528 *529 * @see [shouldNotBeIn]530 * @see [beIn]531 */532fun <T> T.shouldNotBeIn(vararg any: T) = this shouldNot beIn(any.toList())533/**534 * Verifies that this element is in [array] by comparing value535 *536 * Assertion to check that this element is in [array]. This assertion checks by value, and not by reference,537 * therefore even if the exact instance is not in [array] but another instance with same value is present, the538 * test will pass.539 *540 * An empty array will always fail. If you need to check for empty array, use [Array.shouldBeEmpty]541 *542 * @see [shouldNotBeIn]543 * @see [beIn]544 */545@JvmName("shouldBeInArray")546infix fun <T> T.shouldBeIn(array: Array<T>) = this should beIn(array.toList())547/**548 * Verifies that this element is NOT any of [array]549 *550 * Assertion to check that this element is not any of [array]. This assertion checks by value, and not by reference,551 * therefore any instance with same value must not be in [array], or this will fail.552 *553 * An empty array will always fail. If you need to check for empty array, use [Array.shouldBeEmpty]554 *555 * @see [shouldNotBeIn]556 * @see [beIn]557 */558@JvmName("shouldNotBeInArray")559infix fun <T> T.shouldNotBeIn(array: Array<T>) = this shouldNot beIn(array.toList())560/**561 * Matcher that verifies that this element is in [collection] by comparing value562 *563 * Assertion to check that this element is in [collection]. This assertion checks by value, and not by reference,564 * therefore even if the exact instance is not in [collection] but another instance with same value is present, the565 * test will pass.566 *567 * An empty collection will always fail. If you need to check for empty collection, use [Collection.shouldBeEmpty]568 *569 * @see [shouldBeOneOf]570 * @see [shouldNotBeOneOf]571 */572fun <T> beIn(collection: Collection<T>) = object : Matcher<T> {573 override fun test(value: T): MatcherResult {574 if (collection.isEmpty()) throwEmptyCollectionError()575 val match = value in collection576 return MatcherResult(577 match,578 "Collection should contain ${value.show().value}, but doesn't. Possible values: ${collection.show().value}",579 "Collection should not contain ${value.show().value}, but does. Forbidden values: ${collection.show().value}"580 )581 }582}583private fun throwEmptyCollectionError(): Nothing {584 throw AssertionError("Asserting content on empty collection. Use Collection.shouldBeEmpty() instead.")585}...

Full Screen

Full Screen

Array.shouldContainAnyOf

Using AI Code Generation

copy

Full Screen

1import io.kotest.matchers.collections.shouldContainAnyOf2import io.kotest.matchers.collections.shouldContainNoneOf3import io.kotest.matchers.collections.shouldContainNoneOfInOrder4import io.kotest.matchers.collections.shouldContainOnly5import io.kotest.matchers.collections.shouldContainOnlyInOrder6import io.kotest.matchers.collections.shouldContainSame7import io.kotest.matchers.collections.shouldHaveAtLeastSize8import io.kotest.matchers.collections.shouldHaveAtMostSize9import io.kotest.matchers.collections.shouldHaveSize10import io.kotest.matchers.collections.shouldHaveSingleElement11import io.kotest.matchers.collections.shouldHaveSingleElement12import io.kotest.matchers.collections.shouldHaveTheSameElementsAs13import io.kotest.matchers.collections.shouldHaveTheSameElementsInOrderAs14import io.kotest.matchers.collections.shouldNotBeEmpty

Full Screen

Full Screen

Array.shouldContainAnyOf

Using AI Code Generation

copy

Full Screen

1val list = listOf(1, 2, 3)2list shouldContainAnyOf listOf(1, 4)3val list = listOf(1, 2, 3)4list shouldContainNoneOf listOf(4, 5)5val list = listOf(1, 2, 3)6list shouldContainNoneOf listOf(4, 5)7val list = listOf(1, 2, 3)8list shouldContainInOrder listOf(1, 2)9val list = listOf(1, 2, 3)10list shouldContainSame listOf(3, 2, 1)11val list = listOf(1, 2, 3)12val list = listOf(1, 2, 3)13val list = listOf(1, 2, 3)14val list = listOf(1, 2, 3)15val list = listOf(1, 2, 3)16val list = listOf(1, 2, 3)17val list = listOf(1, 2, 3)

Full Screen

Full Screen

Array.shouldContainAnyOf

Using AI Code Generation

copy

Full Screen

1val list = listOf("a", "b", "c")2list shouldContainAnyOf listOf("a", "d")3val list = listOf("a", "b", "c")4list shouldNotContainAnyOf listOf("d", "e")5val list = listOf("a", "b", "c")6list shouldContainNone listOf("d", "e")7val list = listOf("a", "b", "c")8list shouldContainNoneInOrder listOf("d", "e")9val list = listOf("a", "b", "c")10list shouldContainNoneInOrder listOf("d", "e")11val list = listOf("a", "b", "c")12list shouldContainSame listOf("a", "b", "c")13val list = listOf("a", "b", "c")14list shouldContainSameInOrder listOf("a", "b", "c")15val list = listOf("a", "b", "c")16list shouldContainExactly listOf("a", "b", "c")17val list = listOf("a", "b", "c")18list shouldContainExactlyInOrder listOf("a", "b", "c")19val list = listOf("a", "b", "c")20list shouldContainInOrder listOf("a", "b", "c")21val list = listOf("a", "

Full Screen

Full Screen

Array.shouldContainAnyOf

Using AI Code Generation

copy

Full Screen

1fun main(args: Array<String>) {2val arr = arrayOf(1, 2, 3)3arr shouldContainAnyOf arrayOf(2, 3, 4)4}5fun main ( args : Array < String > ) {6val arr = arrayOf ( 1 , 2 , 3 )7arr shouldContainAnyOf arrayOf ( 2 , 3 , 4 )8}9Kotlin Array shouldContainAnyOf() method example10Kotlin Array shouldContainAnyOf() method example11Kotlin Array shouldContainAnyOf() method example

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful