testDragEvents() {
    /** @suppress {visibility} suppression added to enable type checking */
    const offset = style.getPageOffset(oneThumbSlider.valueThumb);
    /** @suppress {visibility} suppression added to enable type checking */
    const size = style.getSize(oneThumbSlider.valueThumb);
    offset.x += size.width / 2;
    offset.y += size.height / 2;
    let event_types = [];
    const handler = (evt) => {
      event_types.push(evt.type);
    };

    events.listen(
        oneThumbSlider,
        [
          SliderBase.EventType.DRAG_START,
          SliderBase.EventType.DRAG_END,
          SliderBase.EventType.DRAG_VALUE_START,
          SliderBase.EventType.DRAG_VALUE_END,
          SliderBase.EventType.DRAG_EXTENT_START,
          SliderBase.EventType.DRAG_EXTENT_END,
          Component.EventType.CHANGE,
        ],
        handler);

    // Since the order of the events between value and extent is not
    // guaranteed across browsers, we need to allow for both here and once
    // we have them all, make sure that they were different.
    function isValueOrExtentDragStart(type) {
      return type == SliderBase.EventType.DRAG_VALUE_START ||
          type == SliderBase.EventType.DRAG_EXTENT_START;
    }
    function isValueOrExtentDragEnd(type) {
      return type == SliderBase.EventType.DRAG_VALUE_END ||
          type == SliderBase.EventType.DRAG_EXTENT_END;
    }

    // Test that dragging the thumb calls all the correct events.
    testingEvents.fireMouseDownEvent(oneThumbSlider.valueThumb);
    offset.x += 100;
    testingEvents.fireMouseMoveEvent(oneThumbSlider.valueThumb, offset);
    testingEvents.fireMouseUpEvent(oneThumbSlider.valueThumb);

    assertEquals(9, event_types.length);

    assertEquals(SliderBase.EventType.DRAG_START, event_types[0]);
    assertTrue(isValueOrExtentDragStart(event_types[1]));

    assertEquals(SliderBase.EventType.DRAG_START, event_types[2]);
    assertTrue(isValueOrExtentDragStart(event_types[3]));

    assertEquals(Component.EventType.CHANGE, event_types[4]);

    assertEquals(SliderBase.EventType.DRAG_END, event_types[5]);
    assertTrue(isValueOrExtentDragEnd(event_types[6]));

    assertEquals(SliderBase.EventType.DRAG_END, event_types[7]);
    assertTrue(isValueOrExtentDragEnd(event_types[8]));

    assertFalse(event_types[1] == event_types[3]);
    assertFalse(event_types[6] == event_types[8]);

    // Test that clicking the thumb without moving the mouse does not cause
    // a CHANGE event between DRAG_START/DRAG_END.
    event_types = [];
    testingEvents.fireMouseDownEvent(oneThumbSlider.valueThumb);
    testingEvents.fireMouseUpEvent(oneThumbSlider.valueThumb);

    assertEquals(8, event_types.length);

    assertEquals(SliderBase.EventType.DRAG_START, event_types[0]);
    assertTrue(isValueOrExtentDragStart(event_types[1]));

    assertEquals(SliderBase.EventType.DRAG_START, event_types[2]);
    assertTrue(isValueOrExtentDragStart(event_types[3]));

    assertEquals(SliderBase.EventType.DRAG_END, event_types[4]);
    assertTrue(isValueOrExtentDragEnd(event_types[5]));

    assertEquals(SliderBase.EventType.DRAG_END, event_types[6]);
    assertTrue(isValueOrExtentDragEnd(event_types[7]));

    assertFalse(event_types[1] == event_types[3]);
    assertFalse(event_types[5] == event_types[7]);

    // Early listener removal, do not wait for tearDown, to avoid building
    // up arrays of events unnecessarilly in further tests.
    events.removeAll(oneThumbSlider);
  }
Tests dragging events.
@suppress {visibility} suppression added to
     enable type checking