# Copyright 2018 Google Inc.
#
# 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.

import platform

from future.tests.base import unittest


class MonsoonTest(unittest.TestCase):

  @unittest.skipIf(platform.system() == 'Windows',
                   'fcntl does not exist on Windows')
  def test_monsoon_import(self):
    # TODO: Replace 'fnctl' with a Windows equivalent when on Windows
    from mobly.controllers import monsoon


if __name__ == '__main__':
  unittest.main()
