test_sync_device_name.html (7978B)
1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 <title>sync-device-name test</title> 6 <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> 7 <link 8 rel="stylesheet" 9 href="chrome://mochikit/content/tests/SimpleTest/test.css" 10 /> 11 <link rel="stylesheet" href="chrome://global/skin/global.css" /> 12 <script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script> 13 <script src="../../../../../toolkit/content/tests/widgets/lit-test-helpers.js"></script> 14 <script 15 type="module" 16 src="chrome://browser/content/preferences/widgets/sync-device-name.mjs" 17 ></script> 18 <script> 19 let html, testHelpers; 20 21 const TEST_DEVICE_NAME = "My Device"; 22 23 add_setup(async function setup() { 24 testHelpers = new LitTestHelpers(); 25 ({ html } = await testHelpers.setupLit()); 26 testHelpers.setupTests({ 27 templateFn: () => 28 html`<sync-device-name 29 value=${TEST_DEVICE_NAME} 30 ></sync-device-name>`, 31 }); 32 33 MozXULElement.insertFTLIfNeeded("browser/preferences/preferences.ftl"); 34 }); 35 36 add_task(async function testSyncDeviceName() { 37 let { 38 children: [syncDeviceName], 39 } = await testHelpers.renderTemplate(); 40 41 ok(syncDeviceName, "sync-device-name element renders."); 42 ok( 43 !syncDeviceName._isInEditMode, 44 "sync-device-name initially renders in display mode." 45 ); 46 let deviceNameLabel = 47 syncDeviceName.shadowRoot.querySelector("moz-box-item").label; 48 is(deviceNameLabel, TEST_DEVICE_NAME, "Device name is displayed."); 49 ok(syncDeviceName.changeBtnEl, "Change device name button renders."); 50 51 synthesizeMouseAtCenter(syncDeviceName.changeBtnEl, {}); 52 await syncDeviceName.updateComplete; 53 54 ok( 55 syncDeviceName._isInEditMode, 56 "sync-device-name switches to edit mode." 57 ); 58 is( 59 syncDeviceName.shadowRoot.activeElement, 60 syncDeviceName.inputTextEl, 61 "The input element is in focus." 62 ); 63 is( 64 syncDeviceName.inputTextEl.inputEl.value, 65 TEST_DEVICE_NAME, 66 "Device name text is displayed in input element." 67 ); 68 69 let cancelBtn = syncDeviceName.shadowRoot.querySelector( 70 "#fxaCancelChangeDeviceName" 71 ); 72 let saveBtn = syncDeviceName.shadowRoot.querySelector( 73 "#fxaSaveChangeDeviceName" 74 ); 75 ok(cancelBtn && saveBtn, "Cancel and Save buttons render."); 76 77 synthesizeMouseAtCenter(cancelBtn, {}); 78 await syncDeviceName.updateComplete; 79 80 ok( 81 !syncDeviceName._isInEditMode, 82 "sync-device-name switches back to display mode." 83 ); 84 is( 85 syncDeviceName.shadowRoot.activeElement, 86 syncDeviceName.changeBtnEl, 87 "The Change device name button element is in focus." 88 ); 89 }); 90 91 add_task(async function testDisabledStateOfSyncDeviceName() { 92 let { 93 children: [syncDeviceName], 94 } = await testHelpers.renderTemplate(); 95 96 ok(!syncDeviceName.disabled, "sync-device-name is enabled by default."); 97 ok( 98 !syncDeviceName.changeBtnEl.disabled, 99 "Change device name button is enabled by default." 100 ); 101 102 syncDeviceName.disabled = true; 103 await syncDeviceName.updateComplete; 104 105 ok( 106 syncDeviceName.changeBtnEl.disabled, 107 "Change device name button is disabled when sync-device-name is disabled." 108 ); 109 }); 110 111 add_task(async function testEditModeOfSyncDeviceName() { 112 let { 113 children: [syncDeviceName], 114 } = await testHelpers.renderTemplate(); 115 116 const TEST_STRING = " Test"; 117 118 ok(syncDeviceName, "sync-device-name element renders."); 119 120 synthesizeMouseAtCenter(syncDeviceName.changeBtnEl, {}); 121 await syncDeviceName.updateComplete; 122 123 is( 124 syncDeviceName.shadowRoot.activeElement, 125 syncDeviceName.inputTextEl, 126 "The input element is in focus." 127 ); 128 129 sendString(TEST_STRING); 130 131 is( 132 syncDeviceName.inputTextEl.value, 133 `${TEST_DEVICE_NAME}${TEST_STRING}`, 134 "The input element has updated value." 135 ); 136 137 let cancelBtn = syncDeviceName.shadowRoot.querySelector( 138 "#fxaCancelChangeDeviceName" 139 ); 140 141 synthesizeMouseAtCenter(cancelBtn, {}); 142 await syncDeviceName.updateComplete; 143 144 is( 145 syncDeviceName.value, 146 TEST_DEVICE_NAME, 147 "Device name value hasn't changed." 148 ); 149 150 synthesizeMouseAtCenter(syncDeviceName.changeBtnEl, {}); 151 await syncDeviceName.updateComplete; 152 sendString(TEST_STRING); 153 154 is( 155 syncDeviceName.inputTextEl.value, 156 `${TEST_DEVICE_NAME}${TEST_STRING}`, 157 "The input element has updated value." 158 ); 159 160 let saveBtn = syncDeviceName.shadowRoot.querySelector( 161 "#fxaSaveChangeDeviceName" 162 ); 163 synthesizeMouseAtCenter(saveBtn, {}); 164 await syncDeviceName.updateComplete; 165 166 is( 167 syncDeviceName.value, 168 `${TEST_DEVICE_NAME}${TEST_STRING}`, 169 "Device name value was updated after clicking the Save button." 170 ); 171 }); 172 173 add_task(async function testSyncDeviceNameKeyboardInteraction() { 174 let { 175 children: [syncDeviceName], 176 } = await testHelpers.renderTemplate(); 177 178 const TEST_STRING = " Test"; 179 180 ok(syncDeviceName, "sync-device-name element renders."); 181 182 synthesizeKey("KEY_Tab", {}); 183 184 is( 185 syncDeviceName.shadowRoot.activeElement, 186 syncDeviceName.changeBtnEl, 187 "Change device name button element is in focus." 188 ); 189 190 synthesizeKey("KEY_Enter", {}); 191 await syncDeviceName.updateComplete; 192 193 is( 194 syncDeviceName.shadowRoot.activeElement, 195 syncDeviceName.inputTextEl, 196 "The input element is in focus." 197 ); 198 199 sendString(TEST_STRING); 200 201 is( 202 syncDeviceName.inputTextEl.value, 203 `${TEST_DEVICE_NAME}${TEST_STRING}`, 204 "The input element has updated value." 205 ); 206 207 synthesizeKey("KEY_Escape", {}); 208 await syncDeviceName.updateComplete; 209 210 ok( 211 !syncDeviceName._isInEditMode, 212 "sync-device-name switched to display mode after pressing Escape key." 213 ); 214 is( 215 syncDeviceName.shadowRoot.activeElement, 216 syncDeviceName.changeBtnEl, 217 "Change device name button element is in focus." 218 ); 219 is( 220 syncDeviceName.value, 221 TEST_DEVICE_NAME, 222 "Device name value hasn't changed." 223 ); 224 225 synthesizeKey("KEY_Enter", {}); 226 await syncDeviceName.updateComplete; 227 228 ok( 229 syncDeviceName._isInEditMode, 230 "sync-device-name is back in edit mode." 231 ); 232 is( 233 syncDeviceName.shadowRoot.activeElement, 234 syncDeviceName.inputTextEl, 235 "The input element is in focus." 236 ); 237 238 sendString(TEST_STRING); 239 synthesizeKey("KEY_Enter", {}); 240 await syncDeviceName.updateComplete; 241 242 ok( 243 !syncDeviceName._isInEditMode, 244 "sync-device-name switched to display mode after pressing Enter key." 245 ); 246 is( 247 syncDeviceName.shadowRoot.activeElement, 248 syncDeviceName.changeBtnEl, 249 "Change device name button element is in focus." 250 ); 251 is( 252 syncDeviceName.value, 253 `${TEST_DEVICE_NAME}${TEST_STRING}`, 254 "Device name value was updated." 255 ); 256 }); 257 </script> 258 </head> 259 <body> 260 <p id="display"></p> 261 <div id="content" style="display: none"></div> 262 <pre id="test"></pre> 263 </body> 264 </html>