|
1 | 1 | import { describe, it, expect, beforeEach, afterEach, jest } from '@jest/globals'; |
2 | 2 | import { BrightnessManager } from '../lib/BrightnessManager.js'; |
3 | 3 | import * as Main from 'resource:///org/gnome/shell/ui/main.js'; |
| 4 | +import * as Config from 'resource:///org/gnome/shell/misc/config.js'; |
4 | 5 |
|
5 | 6 | describe('BrightnessManager', () => { |
6 | 7 | let manager; |
7 | 8 |
|
8 | 9 | beforeEach(() => { |
9 | 10 | Main.resetBrightnessManager(true); |
10 | | - manager = new BrightnessManager(); |
| 11 | + Config.setPackageVersion('49.2'); // Default to 49.2 for testing |
| 12 | + manager = new BrightnessManager(Main.brightnessManager); |
11 | 13 | }); |
12 | 14 |
|
13 | 15 | afterEach(() => { |
@@ -55,14 +57,13 @@ describe('BrightnessManager', () => { |
55 | 57 | expect(secondId).toBeDefined(); |
56 | 58 | }); |
57 | 59 |
|
58 | | - it('should setup globalScale listener when changed signal is emitted', () => { |
| 60 | + it('should setup monitor scale listeners when changed signal is emitted', () => { |
59 | 61 | manager.connect(); |
60 | 62 |
|
61 | | - // Trigger the 'changed' signal which should set up globalScale listener |
| 63 | + // Trigger the 'changed' signal which should set up monitor scale listeners |
62 | 64 | Main.brightnessManager.emit('changed'); |
63 | 65 |
|
64 | | - expect(manager._globalScaleSignalId).toBeDefined(); |
65 | | - expect(typeof manager._globalScaleSignalId).toBe('number'); |
| 66 | + expect(manager._monitorScaleSignalIds.length).toBeGreaterThan(0); |
66 | 67 | }); |
67 | 68 | }); |
68 | 69 |
|
@@ -218,7 +219,7 @@ describe('BrightnessManager', () => { |
218 | 219 | manager.connect(); |
219 | 220 | Main.brightnessManager.emit('changed'); // Set up listeners |
220 | 221 |
|
221 | | - expect(manager._globalScaleSignalId).not.toBeNull(); |
| 222 | + // Monitor scale listeners should always be set up |
222 | 223 | expect(manager._monitorScaleSignalIds.length).toBeGreaterThan(0); |
223 | 224 |
|
224 | 225 | manager.destroy(); |
@@ -260,4 +261,125 @@ describe('BrightnessManager', () => { |
260 | 261 | expect(manager._manager).toBeNull(); |
261 | 262 | }); |
262 | 263 | }); |
| 264 | + |
| 265 | + describe('version-specific behavior', () => { |
| 266 | + describe('GNOME 49.2+ (bias slider support)', () => { |
| 267 | + beforeEach(() => { |
| 268 | + Config.setPackageVersion('49.2'); |
| 269 | + Main.resetBrightnessManager(true); |
| 270 | + manager = new BrightnessManager(Main.brightnessManager); |
| 271 | + }); |
| 272 | + |
| 273 | + it('should detect GNOME 49.2+ and enable bias slider support', () => { |
| 274 | + expect(manager._supportsBiasSlider).toBe(true); |
| 275 | + }); |
| 276 | + |
| 277 | + it('should NOT setup globalScale value listener on GNOME 49.2+', () => { |
| 278 | + manager.connect(); |
| 279 | + Main.brightnessManager.emit('changed'); |
| 280 | + |
| 281 | + // globalScale listener should not be set up for bias slider versions |
| 282 | + expect(manager._globalScaleSignalId).toBeNull(); |
| 283 | + }); |
| 284 | + |
| 285 | + it('should set monitor scales to neutral bias (0.5) on monitor change', () => { |
| 286 | + manager.connect(); |
| 287 | + Main.brightnessManager.emit('changed'); |
| 288 | + |
| 289 | + const scales = Main.brightnessManager.scales; |
| 290 | + expect(scales.length).toBeGreaterThan(0); |
| 291 | + for (const scale of scales) { |
| 292 | + expect(scale.value).toBe(0.5); |
| 293 | + } |
| 294 | + }); |
| 295 | + |
| 296 | + it('should not trigger user preference callbacks', () => { |
| 297 | + const callback = jest.fn(); |
| 298 | + manager.onUserPreferenceChange.add(callback); |
| 299 | + |
| 300 | + manager.connect(); |
| 301 | + Main.brightnessManager.emit('changed'); |
| 302 | + |
| 303 | + // Change globalScale value |
| 304 | + Main.brightnessManager.globalScale.value = 0.8; |
| 305 | + |
| 306 | + // Callback should NOT be invoked on 49.2+ |
| 307 | + expect(callback).not.toHaveBeenCalled(); |
| 308 | + }); |
| 309 | + }); |
| 310 | + |
| 311 | + describe('GNOME 49.0-49.1 (no bias slider)', () => { |
| 312 | + beforeEach(() => { |
| 313 | + Config.setPackageVersion('49.0'); |
| 314 | + Main.resetBrightnessManager(true); |
| 315 | + manager = new BrightnessManager(Main.brightnessManager); |
| 316 | + }); |
| 317 | + |
| 318 | + it('should detect GNOME 49.0 and disable bias slider support', () => { |
| 319 | + expect(manager._supportsBiasSlider).toBe(false); |
| 320 | + }); |
| 321 | + |
| 322 | + it('should setup globalScale value listener on GNOME 49.0', () => { |
| 323 | + manager.connect(); |
| 324 | + Main.brightnessManager.emit('changed'); |
| 325 | + |
| 326 | + // globalScale listener should be set up for non-bias slider versions |
| 327 | + expect(manager._globalScaleSignalId).not.toBeNull(); |
| 328 | + expect(typeof manager._globalScaleSignalId).toBe('number'); |
| 329 | + }); |
| 330 | + |
| 331 | + it('should NOT set monitor scales to neutral bias', () => { |
| 332 | + manager.connect(); |
| 333 | + |
| 334 | + // Set scales to different values before triggering change |
| 335 | + const scales = Main.brightnessManager.scales; |
| 336 | + const originalValue = scales[0].value; |
| 337 | + |
| 338 | + Main.brightnessManager.emit('changed'); |
| 339 | + |
| 340 | + // On GNOME 49.0 (no bias slider), scales should NOT be reset to 0.5 |
| 341 | + // They keep their original values |
| 342 | + expect(scales[0].value).toBe(originalValue); |
| 343 | + }); |
| 344 | + |
| 345 | + it('should trigger user preference callbacks on globalScale changes', () => { |
| 346 | + const callback = jest.fn(); |
| 347 | + manager.onUserPreferenceChange.add(callback); |
| 348 | + |
| 349 | + manager.connect(); |
| 350 | + Main.brightnessManager.emit('changed'); |
| 351 | + |
| 352 | + // Change globalScale value - this should trigger the callback |
| 353 | + Main.brightnessManager.globalScale.value = 0.8; |
| 354 | + |
| 355 | + expect(callback).toHaveBeenCalledWith(0.8); |
| 356 | + }); |
| 357 | + }); |
| 358 | + |
| 359 | + describe('GNOME 50+ (future versions)', () => { |
| 360 | + beforeEach(() => { |
| 361 | + Config.setPackageVersion('50.0'); |
| 362 | + Main.resetBrightnessManager(true); |
| 363 | + manager = new BrightnessManager(Main.brightnessManager); |
| 364 | + }); |
| 365 | + |
| 366 | + it('should detect GNOME 50+ and enable bias slider support', () => { |
| 367 | + expect(manager._supportsBiasSlider).toBe(true); |
| 368 | + }); |
| 369 | + |
| 370 | + it('should behave like GNOME 49.2+ for future versions', () => { |
| 371 | + manager.connect(); |
| 372 | + Main.brightnessManager.emit('changed'); |
| 373 | + |
| 374 | + // Should not set up globalScale listener |
| 375 | + expect(manager._globalScaleSignalId).toBeNull(); |
| 376 | + |
| 377 | + // Should set neutral bias |
| 378 | + const scales = Main.brightnessManager.scales; |
| 379 | + for (const scale of scales) { |
| 380 | + expect(scale.value).toBe(0.5); |
| 381 | + } |
| 382 | + }); |
| 383 | + }); |
| 384 | + }); |
263 | 385 | }); |
0 commit comments