Tests VTTRegionList functionality: length, operator[], and getRegionById()



** Implicit mode disabled and the regions attribute is null **
EXPECTED (testTrack.track.mode == 'disabled') OK
EXPECTED (testTrack.track.regions == 'null') OK

** The regions attribute should be an empty VTTRegionList **
EXPECTED (regions != null == 'true') OK
EXPECTED (regions.length == '0') OK

** The default value of the track attribute of the region is null**
EXPECTED (region.track == 'null') OK

** The addRegion() method properly updates the VTTRegionList object **
EXPECTED (regions.length == '1') OK
EXPECTED (regions[0] == region == 'true') OK
EXPECTED (regions[0].track == testTrack.track == 'true') OK

** The track attribute should correctly reflect the track to which the region was added to**
EXPECTED (region.track == testTrack.track == 'true') OK

** Adding a region with an existing id should update the existing region **
EXPECTED (regions[0].viewportAnchorX == '59') OK
EXPECTED (regions[0].viewportAnchorY == '68') OK
EXPECTED (regions[0].regionAnchorX == '20') OK
EXPECTED (regions[0].regionAnchorY == '30') OK
EXPECTED (regions[0].lines == '5') OK
EXPECTED (regions[0].width == '87') OK
EXPECTED (regions[0].scroll == 'up') OK
EXPECTED (regions[0] != updatedRegion == 'true') OK

** Add the region back and check if removeRegion() removes it properly **
EXPECTED (regions.length == '1') OK
EXPECTED (regions.length == '0') OK

** In case the region is not found, NotFoundError should be thrown **
NotFoundError: The object can not be found here.

END OF TEST

