diff --git a/AUTHORS.md b/AUTHORS.md index 4f5e92e..248e2ed 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -5,40 +5,41 @@ # Contributors 1. Andreas Volkmann - [@goreRatzete](https://github.com/goreRatzete) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=goreRatzete)) -1. Egor Andreevici - [@Egorand](https://github.com/Egorand) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=Egorand)) -1. Karun Japhet - [@javatarz](https://github.com/javatarz) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=javatarz)) -1. Eric Burke - [@eburke56](https://github.com/eburke56) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=eburke56)) -1. Günther Grill - [@guenhter](https://github.com/guenhter) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=guenhter)) -1. jpopadak -[@jpopadak](https://github.com/jpopadak) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=jpopadak)) -1. Nikolai Hellwig - [@nhellwig](https://github.com/nhellwig) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=nhellwig)) -1. Greg Woodfill - [@gregwoodfill](https://github.com/gregwoodfill) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=gregwoodfill)) -1. cketti -[@cketti](https://github.com/cketti) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=cketti)) -1. Grzegorz Miszewski - [@miszmaniac](https://github.com/miszmaniac) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=miszmaniac)) -1. Yahor Berdnikau - [@Tapchicoma](https://github.com/Tapchicoma) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=Tapchicoma)) -1. Alan Evans - [@westonal](https://github.com/westonal) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=westonal)) -1. Victor J - Reventos [@vjames19](https://github.com/vjames19) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=vjames19)) -1. B. K. Oxley - [@binkley](https://github.com/binkley) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=binkley)) -1. Vasili Chyrvon - [@Jeevuz](https://github.com/Jeevuz) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=Jeevuz)) -1. Yannick - [@fishb6nes](https://github.com/fishb6nes) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=fishb6nes)) -1. Ole Kristian - Sandum [@okkero](https://github.com/okkero) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=okkero)) -1. Gabriel Aumala - [@GAumala](https://github.com/GAumala) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=GAumala)) -1. Deconinck Alban - [@neyb](https://github.com/neyb) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=neyb)) -1. Fabrício Rissetto - [@fabriciorissetto](https://github.com/fabriciorissetto) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=fabriciorissetto)) -1. Vitus Ortner - [@vitusortner](https://github.com/vitusortner) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=vitusortner)) -1. Caleb Brinkman - [@floralvikings](https://github.com/floralvikings) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=floralvikings)) -1. Jonathan Cornaz - [@jcornaz](https://github.com/jcornaz) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=jcornaz)) -1. Ivan Atanasov - [@IvanAtanasov89](https://github.com/IvanAtanasov89) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=IvanAtanasov89)) -1. Ruben Gees - [@rubengees](https://github.com/rubengees) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=rubengees)) -1. Juechen Wang - [@wangjuechen](https://github.com/wangjuechen) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=wangjuechen)) -1. Anton Sheihman [@sheix_](https://github.com/sheix_) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=rubengees)) -1. Vaios Tsitsonis [@St4B](https://github.com/St4B) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=st4b)) -1. Jógvan Olsen - [@jeggy](https://github.com/jeggy) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=jeggy)) -1. Yang C - [@ychescale9](https://github.com/ychescale9) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=ychescale9)) -1. Christian Ivicevic - [@ChristianIvicevic](https://github.com/ChristianIvicevic) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=ChristianIvicevic)) -1. Ivan Mikhnovich - [@Murtaught](https://github.com/Murtaught) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=Murtaught)) -1. Jc Miñarro - [@JcMinarro](https://github.com/JcMinarro) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=JcMinarro)) -1. Kshitij Patil [@Kshitij09](https://github.com/Kshitij09) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=Kshitij09)) -1. Keivan Esbati - [@Tenkei](https://github.com/Tenkei) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=Tenkei)) -1. Sam Neirinck - [@samneirinck](https://github.com/samneirinck) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=samneirinck)) -1. Maxim Ivanov [@drcolombo](https://github.com/drcolombo) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=drcolombo)) -1. Piotr Bakalarski [@piotrb5e3](https://github.com/piotrb5e3) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=piotrb5e3)) \ No newline at end of file +2. Egor Andreevici - [@Egorand](https://github.com/Egorand) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=Egorand)) +3. Karun Japhet - [@javatarz](https://github.com/javatarz) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=javatarz)) +4. Eric Burke - [@eburke56](https://github.com/eburke56) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=eburke56)) +5. Günther Grill - [@guenhter](https://github.com/guenhter) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=guenhter)) +6. jpopadak -[@jpopadak](https://github.com/jpopadak) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=jpopadak)) +7. Nikolai Hellwig - [@nhellwig](https://github.com/nhellwig) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=nhellwig)) +8. Greg Woodfill - [@gregwoodfill](https://github.com/gregwoodfill) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=gregwoodfill)) +9. cketti -[@cketti](https://github.com/cketti) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=cketti)) +10. Grzegorz Miszewski - [@miszmaniac](https://github.com/miszmaniac) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=miszmaniac)) +11. Yahor Berdnikau - [@Tapchicoma](https://github.com/Tapchicoma) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=Tapchicoma)) +12. Alan Evans - [@westonal](https://github.com/westonal) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=westonal)) +13. Victor J - Reventos [@vjames19](https://github.com/vjames19) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=vjames19)) +14. B. K. Oxley - [@binkley](https://github.com/binkley) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=binkley)) +15. Vasili Chyrvon - [@Jeevuz](https://github.com/Jeevuz) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=Jeevuz)) +16. Yannick - [@fishb6nes](https://github.com/fishb6nes) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=fishb6nes)) +17. Ole Kristian - Sandum [@okkero](https://github.com/okkero) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=okkero)) +18. Gabriel Aumala - [@GAumala](https://github.com/GAumala) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=GAumala)) +19. Deconinck Alban - [@neyb](https://github.com/neyb) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=neyb)) +20. Fabrício Rissetto - [@fabriciorissetto](https://github.com/fabriciorissetto) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=fabriciorissetto)) +21. Vitus Ortner - [@vitusortner](https://github.com/vitusortner) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=vitusortner)) +22. Caleb Brinkman - [@floralvikings](https://github.com/floralvikings) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=floralvikings)) +23. Jonathan Cornaz - [@jcornaz](https://github.com/jcornaz) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=jcornaz)) +24. Ivan Atanasov - [@IvanAtanasov89](https://github.com/IvanAtanasov89) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=IvanAtanasov89)) +25. Ruben Gees - [@rubengees](https://github.com/rubengees) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=rubengees)) +26. Juechen Wang - [@wangjuechen](https://github.com/wangjuechen) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=wangjuechen)) +27. Anton Sheihman [@sheix_](https://github.com/sheix_) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=rubengees)) +28. Vaios Tsitsonis [@St4B](https://github.com/St4B) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=st4b)) +29. Jógvan Olsen - [@jeggy](https://github.com/jeggy) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=jeggy)) +30. Yang C - [@ychescale9](https://github.com/ychescale9) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=ychescale9)) +31. Christian Ivicevic - [@ChristianIvicevic](https://github.com/ChristianIvicevic) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=ChristianIvicevic)) +32. Ivan Mikhnovich - [@Murtaught](https://github.com/Murtaught) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=Murtaught)) +33. Jc Miñarro - [@JcMinarro](https://github.com/JcMinarro) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=JcMinarro)) +34. Kshitij Patil [@Kshitij09](https://github.com/Kshitij09) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=Kshitij09)) +35. Keivan Esbati - [@Tenkei](https://github.com/Tenkei) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=Tenkei)) +36. Sam Neirinck - [@samneirinck](https://github.com/samneirinck) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=samneirinck)) +37. Maxim Ivanov [@drcolombo](https://github.com/drcolombo) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=drcolombo)) +38. Piotr Bakalarski [@piotrb5e3](https://github.com/piotrb5e3) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=piotrb5e3)) +39. Priyank Gupta [@priyaaank](https://github.com/priyaaank) ([Contributions](https://github.com/MarkusAmshove/Kluent/commits?author=priyaaank)) \ No newline at end of file diff --git a/docs/FileSystem.md b/docs/FileSystem.md index e1fe570..fd2aa7f 100644 --- a/docs/FileSystem.md +++ b/docs/FileSystem.md @@ -19,4 +19,7 @@ file.shouldNotHaveExtension("txt") file.shouldHaveName("myFile") file.shouldNotHaveName("myFile") + +file.shouldContainLineWithString("aSampleString") +file.shouldNotContainLineWithString("aSampleString") ``` diff --git a/jvm/src/main/kotlin/org/amshove/kluent/File.kt b/jvm/src/main/kotlin/org/amshove/kluent/File.kt index e63e65d..8b0285e 100644 --- a/jvm/src/main/kotlin/org/amshove/kluent/File.kt +++ b/jvm/src/main/kotlin/org/amshove/kluent/File.kt @@ -3,6 +3,7 @@ package org.amshove.kluent import org.amshove.kluent.internal.assertFalse import org.amshove.kluent.internal.assertTrue import java.io.File +import java.nio.charset.Charset fun File.shouldExist() = assertTrue("The file '${this.absolutePath}' should exist, but does not", this.exists()) fun File.shouldNotExist() = assertFalse("The file '${this.absolutePath}' should not exist, but does", this.exists()) @@ -19,3 +20,6 @@ infix fun File.shouldNotHaveExtension(other: String) = this.extension shouldNotB infix fun File.shouldHaveName(other: String) = this.name shouldBeEqualTo other infix fun File.shouldNotHaveName(other: String) = this.name shouldNotBeEqualTo other +infix fun File.shouldContainLineWithString(other: String) = this.readText(Charset.defaultCharset()) shouldContain other +infix fun File.shouldNotContainLineWithString(other: String) = this.readText(Charset.defaultCharset()) shouldNotContain other + diff --git a/jvm/src/main/kotlin/org/amshove/kluent/FileBacktick.kt b/jvm/src/main/kotlin/org/amshove/kluent/FileBacktick.kt index 331a00e..7846edc 100644 --- a/jvm/src/main/kotlin/org/amshove/kluent/FileBacktick.kt +++ b/jvm/src/main/kotlin/org/amshove/kluent/FileBacktick.kt @@ -14,6 +14,9 @@ fun File.`should not be file`() = this.shouldNotBeFile() infix fun File.`should have extension`(other: String) = this shouldHaveExtension(other) infix fun File.`should not have extension`(other: String) = this shouldNotHaveExtension(other) -infix fun File.`should have name`(other: String) = this shouldHaveName(other) -infix fun File.`should not have name`(other: String) = this shouldNotHaveName(other) +infix fun File.`should have name`(other: String) = this shouldHaveName (other) +infix fun File.`should not have name`(other: String) = this shouldNotHaveName (other) + +infix fun File.`should contain line with string`(other: String) = this shouldContainLineWithString (other) +infix fun File.`should not contain line with string`(other: String) = this shouldNotContainLineWithString (other) diff --git a/jvm/src/test/kotlin/org/amshove/kluent/tests/assertions/file/FileTestHelper.kt b/jvm/src/test/kotlin/org/amshove/kluent/tests/assertions/file/FileTestHelper.kt index 9dc270a..388b53b 100644 --- a/jvm/src/test/kotlin/org/amshove/kluent/tests/assertions/file/FileTestHelper.kt +++ b/jvm/src/test/kotlin/org/amshove/kluent/tests/assertions/file/FileTestHelper.kt @@ -3,10 +3,10 @@ package org.amshove.kluent.tests.assertions.file import java.io.File /** - * Constructs a directory or a plain file with no content and deletes it after the body has run + * Constructs a directory or a plain file with text content and deletes it after the body has run */ fun File.useFile(isDir: Boolean = false, body: (file: File) -> Unit) = try { - if (isDir) this.mkdir() else this.writeText("") + if (isDir) this.mkdir() else this.writeText("quick brown fox over a lazy dog") body(this) } finally { if (!this.delete()) throw Exception("Could not delete file") diff --git a/jvm/src/test/kotlin/org/amshove/kluent/tests/assertions/file/ShouldContainLineWithStringShould.kt b/jvm/src/test/kotlin/org/amshove/kluent/tests/assertions/file/ShouldContainLineWithStringShould.kt new file mode 100644 index 0000000..5a64aed --- /dev/null +++ b/jvm/src/test/kotlin/org/amshove/kluent/tests/assertions/file/ShouldContainLineWithStringShould.kt @@ -0,0 +1,20 @@ +package org.amshove.kluent.tests.assertions.file + +import org.amshove.kluent.internal.assertFails +import org.amshove.kluent.shouldContainLineWithString +import org.junit.Test +import java.io.File + +class ShouldContainLineWithStringShould { + private val file = File("test") + + @Test + fun passWhenFileContainsLineWithString() { + file.useFile { it.shouldContainLineWithString("brown fox") } + } + + @Test + fun failWhenFileDoesNotContainLineWithString() { + assertFails { file.shouldContainLineWithString("blue whale") } + } +} \ No newline at end of file diff --git a/jvm/src/test/kotlin/org/amshove/kluent/tests/assertions/file/ShouldNotContainLineWithStringShould.kt b/jvm/src/test/kotlin/org/amshove/kluent/tests/assertions/file/ShouldNotContainLineWithStringShould.kt new file mode 100644 index 0000000..f3a7100 --- /dev/null +++ b/jvm/src/test/kotlin/org/amshove/kluent/tests/assertions/file/ShouldNotContainLineWithStringShould.kt @@ -0,0 +1,21 @@ +package org.amshove.kluent.tests.assertions.file + +import org.amshove.kluent.internal.assertFails +import org.amshove.kluent.shouldContainLineWithString +import org.amshove.kluent.shouldNotContainLineWithString +import org.junit.Test +import java.io.File + +class ShouldNotContainLineWithStringShould { + private val file = File("test") + + @Test + fun passWhenFileDoesNotContainsLineWithString() { + file.useFile { it.shouldNotContainLineWithString("brown dog") } + } + + @Test + fun failWhenFileContainsLineWithString() { + assertFails { file.shouldNotContainLineWithString("lazy dog") } + } +} \ No newline at end of file