1342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch#!/usr/bin/env python
2342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch
3342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch# Copyright (c) 2012 Google Inc. All rights reserved.
4342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch# Use of this source code is governed by a BSD-style license that can be
5342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch# found in the LICENSE file.
6342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch
7342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch"""Unit tests for the common.py file."""
8342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch
9342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdochimport gyp.common
10342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdochimport unittest
11342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdochimport sys
12342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch
13342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch
14342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdochclass TestTopologicallySorted(unittest.TestCase):
15342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch  def test_Valid(self):
16342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    """Test that sorting works on a valid graph with one possible order."""
17342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    graph = {
18342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch        'a': ['b', 'c'],
19342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch        'b': [],
20342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch        'c': ['d'],
21342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch        'd': ['b'],
22342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch        }
23342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    def GetEdge(node):
24342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch      return tuple(graph[node])
25342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    self.assertEqual(
26342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch      gyp.common.TopologicallySorted(graph.keys(), GetEdge),
27342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch      ['a', 'c', 'd', 'b'])
28342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch
29342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch  def test_Cycle(self):
30342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    """Test that an exception is thrown on a cyclic graph."""
31342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    graph = {
32342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch        'a': ['b'],
33342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch        'b': ['c'],
34342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch        'c': ['d'],
35342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch        'd': ['a'],
36342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch        }
37342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    def GetEdge(node):
38342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch      return tuple(graph[node])
39342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    self.assertRaises(
40342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch      gyp.common.CycleError, gyp.common.TopologicallySorted,
41342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch      graph.keys(), GetEdge)
42342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch
43342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch
44342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdochclass TestGetFlavor(unittest.TestCase):
45342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch  """Test that gyp.common.GetFlavor works as intended"""
46342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch  original_platform = ''
47342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch
48342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch  def setUp(self):
49342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    self.original_platform = sys.platform
50342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch
51342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch  def tearDown(self):
52342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    sys.platform = self.original_platform
53342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch
54342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch  def assertFlavor(self, expected, argument, param):
55342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    sys.platform = argument
56342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    self.assertEqual(expected, gyp.common.GetFlavor(param))
57342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch
58342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch  def test_platform_default(self):
59342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    self.assertFlavor('freebsd', 'freebsd9' , {})
60342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    self.assertFlavor('freebsd', 'freebsd10', {})
61342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    self.assertFlavor('openbsd', 'openbsd5' , {})
62342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    self.assertFlavor('solaris', 'sunos5'   , {});
63342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    self.assertFlavor('solaris', 'sunos'    , {});
64342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    self.assertFlavor('linux'  , 'linux2'   , {});
65342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    self.assertFlavor('linux'  , 'linux3'   , {});
66342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch
67342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch  def test_param(self):
68342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch    self.assertFlavor('foobar', 'linux2' , {'flavor': 'foobar'})
69342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch
70342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch
71342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdochif __name__ == '__main__':
72342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch  unittest.main()
73