# Copyright 2022 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Starboard Raspberry Pi Platform Test Filters."""

from starboard.tools.testing import test_filter

# pylint: disable=line-too-long

_FILTERED_TESTS = {
    'nplb': [
        'SbAudioSinkTest.*',

        # Permanently filter out drm system related tests as raspi doesn't
        # support any drm systems and there is no plan to implement such
        # support.
        'MultiplePlayerTests*',
        'SbDrmTest.AnySupportedKeySystems',
        'SbMediaCanPlayMimeAndKeySystem.AnySupportedKeySystems',
        'SbMediaCanPlayMimeAndKeySystem.KeySystemWithAttributes',
        'SbMediaCanPlayMimeAndKeySystem.MinimumSupport',
        'SbMediaSetAudioWriteDurationTests/*',
        'SbPlayerGetAudioConfigurationTests/*',
        'SbPlayerWriteSampleTests*',
        'SbUndefinedBehaviorTest.CallThisPointerIsNullRainyDay',
        'SbSystemGetPropertyTest.FLAKY_ReturnsRequired',
        # Failure tracked by b/287666606.
        'VerticalVideoTests/VerticalVideoTest.WriteSamples*',

        # Enable once verified on the platform.
        'SbMediaCanPlayMimeAndKeySystem.MinimumSupport',
    ],
    'player_filter_tests': [
        # The implementations for the raspberry pi (0 and 2) are incomplete
        # and not meant to be a reference implementation. As such we will
        # not repair these failing tests for now.
        'VideoDecoderTests/VideoDecoderTest.EndOfStreamWithoutAnyInput/beneath_the_canopy_137_avc_dmp_Punchout',
        'VideoDecoderTests/VideoDecoderTest.MultipleResets/beneath_the_canopy_137_avc_dmp_Punchout',
        # Filter failed tests.
        'PlayerComponentsTests/PlayerComponentsTest.*',
    ],
}


class TestFilters(object):
  """Starboard Raspberry Pi platform test filters."""

  def GetTestFilters(self):
    filters = []
    for target, tests in _FILTERED_TESTS.items():
      filters.extend(test_filter.TestFilter(target, test) for test in tests)
    return filters


def CreateTestFilters():
  return TestFilters()
