Memory.swift 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. //
  2. // Memory.swift - Ensures that an allocated terminal is deallocated, this is
  3. // to make sure we do not regress when we use helper classes that might introduce
  4. // a strong cycle.
  5. //
  6. //
  7. // Created by Miguel de Icaza on 4/17/21.
  8. //
  9. import Foundation
  10. import XCTest
  11. @testable import SwiftTerm
  12. final class SwiftTermMemory: XCTestCase {
  13. static var deinited = false
  14. static var terminalDeinited = false
  15. class SimpleTerminal: HeadlessTerminal {
  16. init (queue: DispatchQueue) {
  17. super.init (queue: queue, onEnd: { x in })
  18. }
  19. deinit {
  20. SwiftTermMemory.deinited = true
  21. }
  22. }
  23. class EmptyTerminalDelegate: TerminalDelegate {
  24. func send(source: Terminal, data: ArraySlice<UInt8>) {
  25. }
  26. }
  27. class SubTerminal: Terminal {
  28. init (delegate: TerminalDelegate) {
  29. super.init(delegate: delegate)
  30. }
  31. deinit {
  32. SwiftTermMemory.terminalDeinited = true
  33. }
  34. }
  35. // This tests that the `Terminal` instance is not leaking
  36. func testTerminal () {
  37. SwiftTermMemory.terminalDeinited = false
  38. func run () {
  39. let a = SubTerminal (delegate: EmptyTerminalDelegate ())
  40. }
  41. run ()
  42. XCTAssertEqual(SwiftTermMemory.terminalDeinited, true)
  43. }
  44. func allocate (){
  45. let queue = DispatchQueue(label: "Runner", qos: .userInteractive, attributes: .concurrent, autoreleaseFrequency: .inherit, target: nil)
  46. let h = SimpleTerminal(queue: queue)
  47. //h.terminal.close ()
  48. let _ = h.terminal
  49. }
  50. // This test ensures that we are not keeping any strong references
  51. // in the code that would prevent terminal containers from being released
  52. func testMemory ()
  53. {
  54. SwiftTermMemory.deinited = false
  55. allocate ()
  56. XCTAssertEqual(SwiftTermMemory.deinited, true)
  57. }
  58. static var allTests = [
  59. ("testMemory", testMemory),
  60. ]
  61. }