window.lua 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  1. -- love.window
  2. --------------------------------------------------------------------------------
  3. --------------------------------------------------------------------------------
  4. ----------------------------------METHODS---------------------------------------
  5. --------------------------------------------------------------------------------
  6. --------------------------------------------------------------------------------
  7. -- love.window.close
  8. love.test.window.close = function(test)
  9. -- closing window should cause graphics to not be active
  10. love.window.close()
  11. local active = love.graphics.isActive()
  12. test:assertFalse(active, 'check window not active')
  13. love.window.updateMode(360, 240) -- reset
  14. active = love.graphics.isActive()
  15. test:assertTrue(active, 'check window active again')
  16. end
  17. -- love.window.fromPixels
  18. love.test.window.fromPixels = function(test)
  19. -- check dpi/pixel ratio as expected
  20. local dpi = love.window.getDPIScale()
  21. local pixels = love.window.fromPixels(100)
  22. test:assertEquals(100/dpi, pixels, 'check dpi ratio')
  23. end
  24. -- love.window.getDPIScale
  25. -- @NOTE dependent on hardware so best can do is not nil
  26. love.test.window.getDPIScale = function(test)
  27. test:assertNotNil(test)
  28. end
  29. -- love.window.getDesktopDimensions
  30. -- @NOTE dependent on hardware so best can do is not nil
  31. love.test.window.getDesktopDimensions = function(test)
  32. local w, h = love.window.getDesktopDimensions()
  33. test:assertNotNil(w)
  34. test:assertNotNil(h)
  35. end
  36. -- love.window.getDisplayCount
  37. -- @NOTE cant wait for the test suite to be run headless and fail here
  38. love.test.window.getDisplayCount = function(test)
  39. test:assertGreaterEqual(1, love.window.getDisplayCount(), 'check 1 display')
  40. end
  41. -- love.window.getDisplayName
  42. -- @NOTE dependent on hardware so best can do is not nil
  43. love.test.window.getDisplayName = function(test)
  44. test:assertNotNil(love.window.getDisplayName(1))
  45. end
  46. -- love.window.getDisplayOrientation
  47. -- @NOTE dependent on hardware so best can do is not nil
  48. love.test.window.getDisplayOrientation = function(test)
  49. test:assertNotNil(love.window.getDisplayOrientation(1))
  50. end
  51. -- love.window.getFullscreen
  52. love.test.window.getFullscreen = function(test)
  53. -- check not fullscreen to start
  54. test:assertFalse(love.window.getFullscreen(), 'check not fullscreen')
  55. love.window.setFullscreen(true)
  56. -- check now fullscreen
  57. test:assertTrue(love.window.getFullscreen(), 'check now fullscreen')
  58. love.window.setFullscreen(false) -- reset
  59. end
  60. -- love.window.getFullscreenModes
  61. -- @NOTE dependent on hardware so best can do is not nil
  62. love.test.window.getFullscreenModes = function(test)
  63. test:assertNotNil(love.window.getFullscreenModes(1))
  64. end
  65. -- love.window.getIcon
  66. love.test.window.getIcon = function(test)
  67. -- check icon nil by default if not set
  68. test:assertEquals(nil, love.window.getIcon(), 'check nil by default')
  69. local icon = love.image.newImageData('resources/love.png')
  70. -- check getting icon not nil after setting
  71. love.window.setIcon(icon)
  72. test:assertNotNil(love.window.getIcon())
  73. end
  74. -- love.window.getMode
  75. -- @NOTE could prob add more checks on the flags here based on conf.lua
  76. love.test.window.getMode = function(test)
  77. local w, h, flags = love.window.getMode()
  78. test:assertEquals(360, w, 'check w')
  79. test:assertEquals(240, h, 'check h')
  80. test:assertFalse(flags["fullscreen"], 'check fullscreen')
  81. end
  82. -- love.window.getPosition
  83. -- @NOTE anything we could check display index agaisn't in getPosition return?
  84. love.test.window.getPosition = function(test)
  85. love.window.setPosition(100, 100, 1)
  86. local x, y, _ = love.window.getPosition()
  87. test:assertEquals(100, x, 'check position x')
  88. test:assertEquals(100, y, 'check position y')
  89. end
  90. -- love.window.getSafeArea
  91. -- @NOTE dependent on hardware so best can do is not nil
  92. love.test.window.getSafeArea = function(test)
  93. local x, y, w, h = love.window.getSafeArea()
  94. test:assertNotNil(x)
  95. test:assertNotNil(y)
  96. test:assertNotNil(w)
  97. test:assertNotNil(h)
  98. end
  99. -- love.window.getTitle
  100. love.test.window.getTitle = function(test)
  101. -- check title returned is what was set
  102. love.window.setTitle('love.testing')
  103. test:assertEquals('love.testing', love.window.getTitle(), 'check title match')
  104. love.window.setTitle('love.test')
  105. end
  106. -- love.window.getVSync
  107. love.test.window.getVSync = function(test)
  108. test:assertNotNil(love.window.getVSync())
  109. end
  110. -- love.window.hasFocus
  111. -- @NOTE cant really test as cant force focus
  112. love.test.window.hasFocus = function(test)
  113. test:assertNotNil(love.window.hasFocus())
  114. end
  115. -- love.window.hasMouseFocus
  116. -- @NOTE cant really test as cant force focus
  117. love.test.window.hasMouseFocus = function(test)
  118. test:assertNotNil(love.window.hasMouseFocus())
  119. end
  120. -- love.window.isDisplaySleepEnabled
  121. love.test.window.isDisplaySleepEnabled = function(test)
  122. test:assertNotNil(love.window.isDisplaySleepEnabled())
  123. -- check disabled
  124. love.window.setDisplaySleepEnabled(false)
  125. test:assertFalse(love.window.isDisplaySleepEnabled(), 'check sleep disabled')
  126. -- check enabled
  127. love.window.setDisplaySleepEnabled(true)
  128. test:assertTrue(love.window.isDisplaySleepEnabled(), 'check sleep enabled')
  129. end
  130. -- love.window.isMaximized
  131. love.test.window.isMaximized = function(test)
  132. test:assertFalse(love.window.isMaximized(), 'check window not maximized')
  133. love.window.maximize()
  134. test:waitFrames(10)
  135. -- on MACOS maximize wont get recognised immedietely so wait a few frames
  136. test:assertTrue(love.window.isMaximized(), 'check window now maximized')
  137. love.window.restore()
  138. end
  139. -- love.window.isMinimized
  140. love.test.window.isMinimized = function(test)
  141. -- check not minimized to start
  142. test:assertFalse(love.window.isMinimized(), 'check window not minimized')
  143. -- try to minimize
  144. love.window.minimize()
  145. test:waitFrames(10)
  146. -- on linux minimize won't get recognized immediately, so wait a few frames
  147. test:assertTrue(love.window.isMinimized(), 'check window minimized')
  148. love.window.restore()
  149. end
  150. -- love.window.isOpen
  151. love.test.window.isOpen = function(test)
  152. -- check open initially
  153. test:assertTrue(love.window.isOpen(), 'check window open')
  154. -- try closing
  155. love.window.close()
  156. test:assertFalse(love.window.isOpen(), 'check window closed')
  157. love.window.updateMode(360, 240) -- reset
  158. end
  159. -- love.window.isVisible
  160. love.test.window.isVisible = function(test)
  161. -- check visible initially
  162. test:assertTrue(love.window.isVisible(), 'check window visible')
  163. -- check closing makes window not visible
  164. love.window.close()
  165. test:assertFalse(love.window.isVisible(), 'check window not visible')
  166. love.window.updateMode(360, 240) -- reset
  167. end
  168. -- love.window.maximize
  169. love.test.window.maximize = function(test)
  170. test:assertFalse(love.window.isMaximized(), 'check window not maximized')
  171. -- check maximizing is set
  172. love.window.maximize()
  173. test:waitFrames(10)
  174. -- on macos we need to wait a few frames
  175. test:assertTrue(love.window.isMaximized(), 'check window maximized')
  176. love.window.restore()
  177. end
  178. -- love.window.minimize
  179. love.test.window.minimize = function(test)
  180. test:assertFalse(love.window.isMinimized(), 'check window not minimized')
  181. -- check minimizing is set
  182. love.window.minimize()
  183. test:waitFrames(10)
  184. -- on linux we need to wait a few frames
  185. test:assertTrue(love.window.isMinimized(), 'check window maximized')
  186. love.window.restore()
  187. end
  188. -- love.window.requestAttention
  189. love.test.window.requestAttention = function(test)
  190. test:skipTest('cant test this worked')
  191. end
  192. -- love.window.restore
  193. love.test.window.restore = function(test)
  194. -- check minimized to start
  195. love.window.minimize()
  196. test:waitFrames(10)
  197. love.window.restore()
  198. test:waitFrames(10)
  199. -- check restoring the state of the window
  200. test:assertFalse(love.window.isMinimized(), 'check window restored')
  201. end
  202. -- love.window.setDisplaySleepEnabled
  203. love.test.window.setDisplaySleepEnabled = function(test)
  204. -- check disabling sleep
  205. love.window.setDisplaySleepEnabled(false)
  206. test:assertFalse(love.window.isDisplaySleepEnabled(), 'check sleep disabled')
  207. -- check setting it back to enabled
  208. love.window.setDisplaySleepEnabled(true)
  209. test:assertTrue(love.window.isDisplaySleepEnabled(), 'check sleep enabled')
  210. end
  211. -- love.window.setFullscreen
  212. love.test.window.setFullscreen = function(test)
  213. -- check fullscreen is set
  214. love.window.setFullscreen(true)
  215. test:assertTrue(love.window.getFullscreen(), 'check fullscreen')
  216. -- check setting back to normal
  217. love.window.setFullscreen(false)
  218. test:assertFalse(love.window.getFullscreen(), 'check not fullscreen')
  219. end
  220. -- love.window.setIcon
  221. -- @NOTE could check the image data itself?
  222. love.test.window.setIcon = function(test)
  223. -- check setting an icon returns the val
  224. local icon = love.image.newImageData('resources/love.png')
  225. love.window.setIcon(icon)
  226. test:assertNotEquals(nil, love.window.getIcon(), 'check icon not nil')
  227. end
  228. -- love.window.setMode
  229. -- @NOTE same as getMode could be checking more flag properties
  230. love.test.window.setMode = function(test)
  231. -- set window mode
  232. love.window.setMode(512, 512, {
  233. fullscreen = false,
  234. resizable = false
  235. })
  236. -- check what we set is returned
  237. local width, height, flags = love.window.getMode()
  238. test:assertEquals(512, width, 'check window w match')
  239. test:assertEquals(512, height, 'check window h match')
  240. test:assertFalse(flags["fullscreen"], 'check window not fullscreen')
  241. test:assertFalse(flags["resizable"], 'check window not resizeable')
  242. love.window.setMode(360, 240, {
  243. fullscreen = false,
  244. resizable = true
  245. })
  246. end
  247. -- love.window.setPosition
  248. love.test.window.setPosition = function(test)
  249. -- check position is returned
  250. love.window.setPosition(100, 100, 1)
  251. test:waitFrames(10)
  252. local x, y, _ = love.window.getPosition()
  253. test:assertEquals(100, x, 'check position x')
  254. test:assertEquals(100, y, 'check position y')
  255. end
  256. -- love.window.setTitle
  257. love.test.window.setTitle = function(test)
  258. -- check setting title val is returned
  259. love.window.setTitle('love.testing')
  260. test:assertEquals('love.testing', love.window.getTitle(), 'check title matches')
  261. love.window.setTitle('love.test')
  262. end
  263. -- love.window.setVSync
  264. love.test.window.setVSync = function(test)
  265. love.window.setVSync(0)
  266. test:assertNotNil(love.window.getVSync())
  267. end
  268. -- love.window.showMessageBox
  269. -- @NOTE if running headless would need to skip anyway cos can't press it
  270. love.test.window.showMessageBox = function(test)
  271. test:skipTest('cant test this worked')
  272. end
  273. -- love.window.toPixels
  274. love.test.window.toPixels = function(test)
  275. -- check dpi/pixel ratio is as expected
  276. local dpi = love.window.getDPIScale()
  277. local pixels = love.window.toPixels(50)
  278. test:assertEquals(50*dpi, pixels, 'check dpi ratio')
  279. end
  280. -- love.window.updateMode
  281. love.test.window.updateMode = function(test)
  282. -- set initial mode
  283. love.window.setMode(512, 512, {
  284. fullscreen = false,
  285. resizable = false
  286. })
  287. -- update mode with some props but not others
  288. love.window.updateMode(360, 240, nil)
  289. -- check only changed values changed
  290. local width, height, flags = love.window.getMode()
  291. test:assertEquals(360, width, 'check window w match')
  292. test:assertEquals(240, height, 'check window h match')
  293. test:assertFalse(flags["fullscreen"], 'check window not fullscreen')
  294. test:assertFalse(flags["resizable"], 'check window not resizeable')
  295. love.window.setMode(360, 240, { -- reset
  296. fullscreen = false,
  297. resizable = true
  298. })
  299. end