window.lua 11 KB

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