|
19 | 19 | * |
20 | 20 | */ |
21 | 21 |
|
22 | | -/*global describe, it, expect, beforeAll, afterAll, awaitsForDone, beforeEach, awaits, awaitsFor */ |
| 22 | +/*global describe, it, expect, beforeAll, afterAll, awaitsForDone, beforeEach, awaits, awaitsFor, path */ |
23 | 23 |
|
24 | 24 | define(function (require, exports, module) { |
25 | 25 | // Recommended to avoid reloading the integration test window Phoenix instance for each test. |
@@ -246,4 +246,117 @@ define(function (require, exports, module) { |
246 | 246 | // await closeSession(); |
247 | 247 | // }, 1000000); |
248 | 248 | }); |
| 249 | + describe("integration:Navigation back/forward integration tests", function () { |
| 250 | + |
| 251 | + const testProjectPath = SpecRunnerUtils.getTestPath("/spec/quickview-extn-test-files"); |
| 252 | + const NAVIGATION_JUMP_BACK = "navigation.jump.back", |
| 253 | + NAVIGATION_JUMP_FWD = "navigation.jump.fwd", |
| 254 | + _NAVIGATION_RESET_FOR_TESTS = "navigation.jump.reset.tests"; |
| 255 | + |
| 256 | + let FileViewController, // loaded from brackets.test |
| 257 | + CommandManager, |
| 258 | + Commands, |
| 259 | + testWindow, |
| 260 | + MainViewManager, |
| 261 | + brackets, |
| 262 | + $; |
| 263 | + |
| 264 | + beforeAll(async function () { |
| 265 | + testWindow = await SpecRunnerUtils.createTestWindowAndRun(); |
| 266 | + brackets = testWindow.brackets; |
| 267 | + $ = testWindow.$; |
| 268 | + FileViewController = brackets.test.FileViewController; |
| 269 | + CommandManager = brackets.test.CommandManager; |
| 270 | + Commands = brackets.test.Commands; |
| 271 | + MainViewManager = brackets.test.MainViewManager; |
| 272 | + }, 30000); |
| 273 | + |
| 274 | + beforeEach(async ()=>{ |
| 275 | + await awaitsForDone(CommandManager.execute(Commands.FILE_CLOSE_ALL, { _forceClose: true }), |
| 276 | + "closing all file"); |
| 277 | + await SpecRunnerUtils.closeTestWindow(); |
| 278 | + await SpecRunnerUtils.loadProjectInTestWindow(testProjectPath); |
| 279 | + }); |
| 280 | + |
| 281 | + afterAll(async function () { |
| 282 | + FileViewController = null; |
| 283 | + testWindow = null; |
| 284 | + brackets = null; |
| 285 | + $ = null; |
| 286 | + MainViewManager = null; |
| 287 | + Commands = null; |
| 288 | + CommandManager = null; |
| 289 | + await SpecRunnerUtils.closeTestWindow(); |
| 290 | + }, 30000); |
| 291 | + |
| 292 | + async function openFile(relativePath) { |
| 293 | + await awaitsForDone( |
| 294 | + FileViewController.openAndSelectDocument( |
| 295 | + path.join(testProjectPath, relativePath), |
| 296 | + FileViewController.PROJECT_MANAGER |
| 297 | + )); |
| 298 | + } |
| 299 | + |
| 300 | + async function _expectNavButton(backDisabled, fwdDisabled, message) { |
| 301 | + await awaitsFor(()=>{ |
| 302 | + const navBackDisabledState = $("#navBackButton").hasClass("nav-back-btn-disabled"); |
| 303 | + const navFwdDisabledState = $("#navForwardButton").hasClass("nav-forward-btn-disabled"); |
| 304 | + return navBackDisabledState === backDisabled && navFwdDisabledState === fwdDisabled; |
| 305 | + }, message || "For the nav buttons state to be updated"); |
| 306 | + expect($("#navBackButton").hasClass("nav-back-btn-disabled")).toBe(backDisabled); |
| 307 | + expect($("#navForwardButton").hasClass("nav-forward-btn-disabled")).toBe(fwdDisabled); |
| 308 | + } |
| 309 | + |
| 310 | + async function _validateActiveFile(relativePath) { |
| 311 | + await awaitsFor(()=>{ |
| 312 | + return MainViewManager.getCurrentlyViewedFile().fullPath === path.join(testProjectPath, relativePath); |
| 313 | + }, "Active file to be " + relativePath); |
| 314 | + } |
| 315 | + |
| 316 | + async function navigateBack() { |
| 317 | + await awaitsForDone(CommandManager.execute(NAVIGATION_JUMP_BACK), "To navigate back"); |
| 318 | + } |
| 319 | + |
| 320 | + async function navigateForward() { |
| 321 | + await awaitsForDone(CommandManager.execute(NAVIGATION_JUMP_FWD), "To navigate forward"); |
| 322 | + } |
| 323 | + async function navigateResetStack() { |
| 324 | + await awaitsForDone(CommandManager.execute(_NAVIGATION_RESET_FOR_TESTS), "reset nav stacks"); |
| 325 | + } |
| 326 | + |
| 327 | + async function _validateNavForFiles(file1, file2, file3) { |
| 328 | + await openFile("img/update_large_icon.svg"); // we open this just to have the first file back button |
| 329 | + // on first time, because of a race condition, the back button may(enabled but does nothing) or |
| 330 | + // may not be enabled. we cant test for this, so we just open a random file as control |
| 331 | + await openFile(file1); |
| 332 | + await openFile(file2); |
| 333 | + await _expectNavButton(false, true, "nav back only enabled"); |
| 334 | + await navigateBack(); |
| 335 | + await _validateActiveFile(file1); |
| 336 | + await _expectNavButton(false, false, "both enabled"); |
| 337 | + await navigateForward(); |
| 338 | + await _validateActiveFile(file2); |
| 339 | + await _expectNavButton(false, true, "nav back only enabled"); |
| 340 | + await navigateBack(); |
| 341 | + await _validateActiveFile(file1); |
| 342 | + await _expectNavButton(false, false, "both enabled"); |
| 343 | + await openFile(file3); |
| 344 | + await _expectNavButton(false, true, "nav forward disabled due to new file open"); |
| 345 | + } |
| 346 | + |
| 347 | + it("Should navigate back and forward between text files", async function () { |
| 348 | + await navigateResetStack(); |
| 349 | + await _validateNavForFiles("test.css", "test.html", "test.js"); |
| 350 | + }, 15000); |
| 351 | + |
| 352 | + it("Should navigate back and forward between image files", async function () { |
| 353 | + await navigateResetStack(); |
| 354 | + await _validateNavForFiles("img/Color.png", "img/grabber_color-well.png", "img/throbber.gif"); |
| 355 | + }, 15000); |
| 356 | + |
| 357 | + it("Should navigate back and forward between image and text files", async function () { |
| 358 | + await navigateResetStack(); |
| 359 | + await _validateNavForFiles("test.css", "img/grabber_color-well.png", "test.js"); |
| 360 | + }, 15000); |
| 361 | + }); |
249 | 362 | }); |
0 commit comments