File: buttontools.js

package info (click to toggle)
ckeditor 4.19.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 290,372 kB
  • sloc: javascript: 242,409; sh: 202; makefile: 64; python: 37; php: 15; xml: 5
file content (94 lines) | stat: -rw-r--r-- 2,930 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
window.buttonTools = {
	// Standard aria attributes for button element.
	buttonStandardAriaAttributes: {
		'aria-disabled': 'false',
		'role': 'button',
		'aria-haspopup': 'false',
		'aria-labelledby': /^cke_\d+_label$/
	},

	// Asserts that button has given attributes, with given values.
	// Expected attribute value may be a regexp.
	// @param {Object} expectedAttributes
	// @param {CKEDITOR.ui.button} button UI button to be tested.
	assertAttributes: function( expectedAttributes, button ) {
		var buttonElement = this.getButtonDomElement( button ),
			expectedValue,
			attributeValue;

		for ( var attrName in expectedAttributes ) {
			assert.isTrue( buttonElement.hasAttribute( attrName ), 'Button HTML element does not contain ' +
				attrName + ' attribute.' );

			expectedValue = expectedAttributes[ attrName ];
			attributeValue = buttonElement.getAttribute( attrName );

			if ( expectedValue instanceof RegExp ) {
				assert.isTrue( expectedValue.test( attributeValue ), 'Attribute ' + attrName +
					' did not matched expected ' + expectedValue + ' regex' );
			}
			else {
				assert.areSame( expectedValue, attributeValue, 'Invalid value for attribute ' + attrName + '.' );
			}
		}
	},

	// Returns button object.
	// @param {CKEDITOR.editor} editor
	// @param {String} name Name of the button in ui.
	// @return {CKEDITOR.ui.button}
	getUiItem: function( editor, name ) {
		return editor.ui.get( name );
	},

	// Returns html element for given menu.
	// @param {CKEDITOR.ui.button} uiButton
	// @return {CKEDITOR.dom.element}
	getButtonDomElement: function( uiButton ) {
		return CKEDITOR.document.getById( uiButton._.id );
	},

	createAriaPressedTests: function( editorName, buttons ) {
		var tests = {};

		CKEDITOR.tools.array.forEach( buttons, function( button ) {
			createTestCasesForButton( button );
		} );

		return tests;

		function createTestCasesForButton( button ) {
			tests[ 'test ' + button + ' button initial state' ] = createTestCase( button, 'false' );

			tests[ 'test ' + button + ' button state after switching on' ] = createTestCase( button, 'true', [
				CKEDITOR.TRISTATE_ON
			] );

			tests[ 'test ' + button + ' button state after switching off' ] = createTestCase( button, 'false', [
				CKEDITOR.TRISTATE_OFF
			] );

			tests[ 'test ' + button + ' button state after disabling while being switched on' ] = createTestCase(
				button,
				'false', [
					CKEDITOR.TRISTATE_ON,
					CKEDITOR.TRISTATE_DISABLED
				] );
		}

		function createTestCase( buttonName, expected, stateChanges ) {
			return function() {
				var button = window.buttonTools.getUiItem( CKEDITOR.instances[ editorName ], buttonName ),
					expectedAttributes = {
						'aria-pressed': expected
					};

				CKEDITOR.tools.array.forEach( stateChanges || [], function( state ) {
					button.setState( state );
				} );

				window.buttonTools.assertAttributes( expectedAttributes, button );
			};
		}
	}
};