Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for shouldContainLineWithString and shouldNotContainLineWithString assertions #204

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
75 changes: 38 additions & 37 deletions AUTHORS.md
Expand Up @@ -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))
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))
3 changes: 3 additions & 0 deletions docs/FileSystem.md
Expand Up @@ -19,4 +19,7 @@ file.shouldNotHaveExtension("txt")

file.shouldHaveName("myFile")
file.shouldNotHaveName("myFile")

file.shouldContainLineWithString("aSampleString")
file.shouldNotContainLineWithString("aSampleString")
```
4 changes: 4 additions & 0 deletions jvm/src/main/kotlin/org/amshove/kluent/File.kt
Expand Up @@ -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())
Expand All @@ -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

7 changes: 5 additions & 2 deletions jvm/src/main/kotlin/org/amshove/kluent/FileBacktick.kt
Expand Up @@ -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)

Expand Up @@ -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
priyaaank marked this conversation as resolved.
Show resolved Hide resolved
* 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")
Expand Down
@@ -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") }
}
}
@@ -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") }
}
}