window.lua 12 KB

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