# Copyright 2015 The LUCI Authors. All rights reserved.
# Use of this source code is governed under the Apache License, Version 2.0
# that can be found in the LICENSE file.

from recipe_engine import recipe_test_api


class PlatformTestApi(recipe_test_api.RecipeTestApi):
  @recipe_test_api.mod_test_data
  @staticmethod
  def name(name):
    """Set the platform 'name' for the current test.

    The only three values currently allowed are 'win', 'linux', and 'mac'.
    """
    assert name in ('win', 'linux', 'mac'), 'unknown platform %r' % (name,)
    return name

  @recipe_test_api.mod_test_data
  @staticmethod
  def bits(bits):
    """Set the bitness for the current test.

    The only two values currently allowed are 32 and 64.
    """
    assert bits in (32, 64), 'unknown bitness %r' % (bits,)
    return bits

  @recipe_test_api.mod_test_data
  @staticmethod
  def arch(arch):
    """Set the architecture for the current test.

    The only two values currently allowed are 'linux' and 'arm'.
    """
    assert arch in ('intel', 'arm'), 'unknown arch %r' % (arch,)
    return arch

  @recipe_test_api.mod_test_data
  @staticmethod
  def mac_release(version):
    """Set the version number for the `mac_release()` method for the current
    test.

    This should be a string like '10.14.0'.
    """
    assert isinstance(version, basestring), 'bad version (not string): %r' % (version,)
    assert version, 'bad version (empty): %r' % (version,)
    return version

  def __call__(self, name, bits, arch='intel', mac_release='10.13.5'):
    return (
      self.name(name) + self.bits(bits) + self.arch(arch)
      + self.mac_release(mac_release))
