You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TestRunner.kt 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package com.dmdirc.irctest
  2. import com.dmdirc.irctest.cases.testCases
  3. import org.junit.jupiter.api.DynamicTest
  4. import java.io.BufferedReader
  5. import java.io.BufferedWriter
  6. import java.io.InputStreamReader
  7. import java.io.OutputStreamWriter
  8. import java.net.ServerSocket
  9. class IrcLibraryTests {
  10. interface IrcLibrary {
  11. fun connect(nick: String, ident: String, realName: String, password: String?)
  12. fun terminate()
  13. }
  14. fun getTests(library: IrcLibrary, names: List<TestCaseContext> = testCases) = names.map { getTest(library, it) }
  15. fun getTest(library: IrcLibrary, test: TestCaseContext): DynamicTest = DynamicTest.dynamicTest(test.name) {
  16. ServerSocket(12321).use { serverSocket ->
  17. library.connect(
  18. test.config.nick,
  19. test.config.user,
  20. test.config.realName,
  21. test.config.password
  22. )
  23. val clientSocket = serverSocket.accept()
  24. val clientInput = BufferedReader(InputStreamReader(clientSocket.getInputStream()))
  25. val clientOutput = BufferedWriter(OutputStreamWriter(clientSocket.getOutputStream()))
  26. for (step in test.steps) {
  27. println(step)
  28. when (step) {
  29. is SimpleExpectStep -> {
  30. while (true) {
  31. val read = clientInput.readLine()
  32. if (read == step.line) {
  33. println(" MATCH: $read")
  34. break
  35. } else {
  36. println("UNEXPECTED: $read")
  37. }
  38. }
  39. }
  40. is SendStep -> {
  41. println(" SENT: ${step.line}")
  42. clientOutput.write("${step.line}\r\n")
  43. clientOutput.flush()
  44. }
  45. }
  46. }
  47. library.terminate()
  48. }
  49. }
  50. }