/
githubmirror
/
brackets
Обзор
Документация
Войти
/
githubmirror
/
brackets
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/extensions/default/CSSPseudoSelectorHints/unittests.js
218 строк
10 KB
Valtteri Laitinen
Update CSS pseudo-selector hints (#14012)
14 янв 2018, 22:21
14 янв 2018, 22:21
45347fe
Код
Авторство
О чём код?
/* * Copyright (c) 2017 - present Adobe Systems Incorporated. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * */ /*global describe, it, xit, expect, beforeEach, afterEach */ define(function (require, exports, module) { "use strict"; var SpecRunnerUtils = brackets.getModule("spec/SpecRunnerUtils"), CSSPseudoSelectorCodeHints = require("main"), PseudoStaticDataRaw = require("text!PseudoSelectors.json"), PseudoStaticData = JSON.parse(PseudoStaticDataRaw); describe("CSS Pseudo class/element Code Hinting", function () { var defaultContent = ".selector1: { \n" + "} \n" + ".selector2:: { \n" + "} \n" + ".selector3:n { \n" + "} \n" + ".selector4::f { \n" + "} \n"; var testDocument, testEditor; /* * Create a mockup editor with the given content and language id. * * @param {string} content - content for test window * @param {string} languageId */ function setupTest(content, languageId) { var mock = SpecRunnerUtils.createMockEditor(content, languageId); testDocument = mock.doc; testEditor = mock.editor; } function tearDownTest() { SpecRunnerUtils.destroyMockEditor(testDocument); testEditor = null; testDocument = null; } // Ask provider for hints at current cursor position; expect it to return some function expectHints(provider, implicitChar, returnWholeObj) { expect(provider.hasHints(testEditor, implicitChar)).toBe(true); var hintsObj = provider.getHints(); expect(hintsObj).toBeTruthy(); // return just the array of hints if returnWholeObj is falsy return returnWholeObj ? hintsObj : hintsObj.hints; } // Ask provider for hints at current cursor position; expect it NOT to return any function expectNoHints(provider, implicitChar) { expect(provider.hasHints(testEditor, implicitChar)).toBe(false); } // compares lists to ensure they are the same function verifyListsAreIdentical(hintList, values) { var i; expect(hintList.length).toBe(values.length); for (i = 0; i < values.length; i++) { expect(hintList[i]).toBe(values[i]); } } function selectHint(provider, expectedHint, implicitChar) { var hintList = expectHints(provider, implicitChar); expect(hintList.indexOf(expectedHint)).not.toBe(-1); return provider.insertHint(expectedHint); } // Helper function for testing cursor position function fixPos(pos) { if (!("sticky" in pos)) { pos.sticky = null; } return pos; } function expectCursorAt(pos) { var selection = testEditor.getSelection(); expect(fixPos(selection.start)).toEqual(fixPos(selection.end)); expect(fixPos(selection.start)).toEqual(fixPos(pos)); } function verifyFirstEntry(hintList, expectedFirstHint) { expect(hintList[0]).toBe(expectedFirstHint); } // Helper function to // a) ensure the hintList and the list with the available values have the same size // b) ensure that all possible values are mentioned in the hintList function verifyAllValues(hintList, values) { expect(hintList.length).toBe(values.length); expect(hintList.sort().toString()).toBe(values.sort().toString()); } var modesToTest = ['css', 'scss', 'less'], modeCounter; var selectMode = function () { return modesToTest[modeCounter]; }; describe("Pseudo classes in different style modes", function () { beforeEach(function () { // create Editor instance (containing a CodeMirror instance) var mock = SpecRunnerUtils.createMockEditor(defaultContent, selectMode()); testEditor = mock.editor; testDocument = mock.doc; }); afterEach(function () { SpecRunnerUtils.destroyMockEditor(testDocument); testEditor = null; testDocument = null; }); var testAllHints = function () { testEditor.setCursorPos({ line: 0, ch: 11 }); // after : var hintList = expectHints(CSSPseudoSelectorCodeHints.pseudoSelectorHints); console.log(JSON.stringify(hintList)); verifyFirstEntry(hintList, "active"); // filtered on "empty string" verifyListsAreIdentical(hintList, Object.keys(PseudoStaticData.classes).sort()); }, testFilteredHints = function () { testEditor.setCursorPos({ line: 4, ch: 12 }); // after :n var hintList = expectHints(CSSPseudoSelectorCodeHints.pseudoSelectorHints); console.log(JSON.stringify(hintList)); verifyFirstEntry(hintList, "not(selectors)"); // filtered on "n" verifyListsAreIdentical(hintList, ["not(selectors)", "nth-child(n)", "nth-last-child(n)", "nth-last-of-type(n)", "nth-of-type(n)"]); }, testNoHints = function () { testEditor.setCursorPos({ line: 0, ch: 10 }); // after { expect(CSSPseudoSelectorCodeHints.pseudoSelectorHints.hasHints(testEditor, 'a')).toBe(false); }; for (modeCounter in modesToTest) { it("should list all Pseudo selectors right after :", testAllHints); it("should list filtered pseudo selectors right after :n", testFilteredHints); it("should not list rule hints if the cursor is before :", testNoHints); } }); describe("Pseudo elements in various style modes", function () { beforeEach(function () { // create Editor instance (containing a CodeMirror instance) var mock = SpecRunnerUtils.createMockEditor(defaultContent, selectMode()); testEditor = mock.editor; testDocument = mock.doc; }); afterEach(function () { SpecRunnerUtils.destroyMockEditor(testDocument); testEditor = null; testDocument = null; }); var testAllHints = function () { testEditor.setCursorPos({ line: 2, ch: 12 }); // after :: var hintList = expectHints(CSSPseudoSelectorCodeHints.pseudoSelectorHints); console.log(JSON.stringify(hintList)); verifyFirstEntry(hintList, "after"); // filtered on "empty string" verifyListsAreIdentical(hintList, Object.keys(PseudoStaticData.elements).sort()); }, testFilteredHints = function () { testEditor.setCursorPos({ line: 6, ch: 13 }); // after ::f var hintList = expectHints(CSSPseudoSelectorCodeHints.pseudoSelectorHints); console.log(JSON.stringify(hintList)); verifyFirstEntry(hintList, "first-letter"); // filtered on "f" verifyListsAreIdentical(hintList, ["first-letter", "first-line"]); }, testNoHints = function () { testEditor.setCursorPos({ line: 2, ch: 10 }); // after ::f expect(CSSPseudoSelectorCodeHints.pseudoSelectorHints.hasHints(testEditor, 'c')).toBe(false); }; for (modeCounter in modesToTest) { it("should list all Pseudo selectors right after :", testAllHints); it("should list filtered pseudo selectors right after ::f", testFilteredHints); it("should not list rule hints if the cursor is before :", testNoHints); } }); }); });