# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# pylint: disable=import-error,print-statement,relative-import

"""Unit tests for idl_definitions.py."""

import unittest

from .idl_definitions import IdlAttribute


class IdlAttributeTest(unittest.TestCase):

    def test_no_params(self):
        try:
            IdlAttribute()
        except Exception as exception:  # pylint: disable=broad-except
            self.fail('Creating an IdlAttribute with no parameters raised'
                      'an exception: {}.'.format(exception))
