| Index: chrome/common/extensions/docs/server2/owners_data_source_test.py
|
| diff --git a/chrome/common/extensions/docs/server2/owners_data_source_test.py b/chrome/common/extensions/docs/server2/owners_data_source_test.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..64f695251644a27285e822f3f73eec5218e7f70f
|
| --- /dev/null
|
| +++ b/chrome/common/extensions/docs/server2/owners_data_source_test.py
|
| @@ -0,0 +1,189 @@
|
| +#!/usr/bin/env python
|
| +# Copyright 2014 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.
|
| +
|
| +import unittest
|
| +
|
| +from owners_data_source import ParseOwnersFile, OwnersDataSource
|
| +from server_instance import ServerInstance
|
| +from servlet import Request
|
| +from test_file_system import TestFileSystem
|
| +
|
| +
|
| +_TEST_FS = {
|
| + 'chrome': {
|
| + 'browser': {
|
| + 'extensions': {
|
| + 'OWNERS': '\n'.join([
|
| + '# Core owners.',
|
| + 'satsuki@revocs.tld'
|
| + ]),
|
| + 'api': {
|
| + 'some_api': {
|
| + 'OWNERS': '\n'.join([
|
| + 'matoi@owner.tld'
|
| + ]),
|
| + 'some_api.cc': ''
|
| + },
|
| + 'another_api': {
|
| + 'another_api.cc': '',
|
| + 'another_api.h': ''
|
| + },
|
| + 'moar_apis': {
|
| + 'OWNERS': '\n'.join([
|
| + '# For editing moar_apis.',
|
| + 'satsuki@revocs.tld'
|
| + ])
|
| + }
|
| + }
|
| + }
|
| + }
|
| + },
|
| + 'extensions': {
|
| + 'browser': {
|
| + 'api': {
|
| + 'a_different_api': {
|
| + 'OWNERS': '\n'.join([
|
| + '# Hallo!',
|
| + 'nonon@owner.tld',
|
| + 'matoi@owner.tld'
|
| + ])
|
| + }
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +
|
| +class OwnersDataSourceTest(unittest.TestCase):
|
| + def setUp(self):
|
| + server_instance = ServerInstance.ForTest(
|
| + file_system=TestFileSystem(_TEST_FS))
|
| + # Don't randomize the owners to avoid testing issues.
|
| + self._owners_ds = OwnersDataSource(server_instance,
|
| + Request.ForTest('/'),
|
| + randomize=False)
|
| +
|
| + def testParseOwnersFile(self):
|
| + owners_content = '\n'.join([
|
| + 'satsuki@revocs.tld',
|
| + 'mankanshoku@owner.tld',
|
| + '',
|
| + 'matoi@owner.tld'
|
| + ])
|
| + owners, notes = ParseOwnersFile(owners_content, randomize=False)
|
| + # The order of the owners list should reflect the order of the owners file.
|
| + self.assertEqual(owners, [
|
| + {
|
| + 'email': 'satsuki@revocs.tld',
|
| + 'username': 'satsuki'
|
| + },
|
| + {
|
| + 'email': 'mankanshoku@owner.tld',
|
| + 'username': 'mankanshoku'
|
| + },
|
| + {
|
| + 'email': 'matoi@owner.tld',
|
| + 'username': 'matoi',
|
| + 'last': True
|
| + }
|
| + ])
|
| + self.assertEqual(notes, '')
|
| +
|
| + owners_content_with_comments = '\n'.join([
|
| + '# This is a comment concerning this file',
|
| + '# that should not be ignored.',
|
| + 'matoi@owner.tld',
|
| + 'mankanshoku@owner.tld',
|
| + '',
|
| + '# Only bug satsuki if matoi or mankanshoku are unavailable.',
|
| + 'satsuki@revocs.tld'
|
| + ])
|
| + owners, notes = ParseOwnersFile(owners_content_with_comments,
|
| + randomize=False)
|
| + self.assertEqual(owners, [
|
| + {
|
| + 'email': 'matoi@owner.tld',
|
| + 'username': 'matoi'
|
| + },
|
| + {
|
| + 'email': 'mankanshoku@owner.tld',
|
| + 'username': 'mankanshoku'
|
| + },
|
| + {
|
| + 'email': 'satsuki@revocs.tld',
|
| + 'username': 'satsuki',
|
| + 'last': True
|
| + }
|
| + ])
|
| + self.assertEqual(notes, '\n'.join([
|
| + 'This is a comment concerning this file',
|
| + 'that should not be ignored.',
|
| + 'Only bug satsuki if matoi or mankanshoku are unavailable.'
|
| + ]))
|
| +
|
| +
|
| + def testCollectOwners(self):
|
| + # NOTE: Order matters. The list should be sorted by 'apiName'.
|
| + self.assertEqual(self._owners_ds.get('apis'), [{
|
| + 'apiName': 'Core Extensions/Apps Owners',
|
| + 'owners': [
|
| + {
|
| + 'email': 'satsuki@revocs.tld',
|
| + 'username': 'satsuki',
|
| + 'last': True
|
| + }
|
| + ],
|
| + 'notes': 'Core owners.',
|
| + 'id': 'core'
|
| + },
|
| + {
|
| + 'apiName': 'a_different_api',
|
| + 'owners': [
|
| + {
|
| + 'email': 'nonon@owner.tld',
|
| + 'username': 'nonon'
|
| + },
|
| + {
|
| + 'email': 'matoi@owner.tld',
|
| + 'username': 'matoi',
|
| + 'last': True
|
| + }
|
| + ],
|
| + 'notes': 'Hallo!',
|
| + 'id': 'a_different_api'
|
| + },
|
| + {
|
| + 'apiName': 'another_api',
|
| + 'owners': [],
|
| + 'notes': 'Use one of the Core Extensions/Apps Owners.',
|
| + 'id': 'another_api'
|
| + },
|
| + {
|
| + 'apiName': 'moar_apis',
|
| + 'owners': [
|
| + {
|
| + 'email': 'satsuki@revocs.tld',
|
| + 'username': 'satsuki',
|
| + 'last': True
|
| + }
|
| + ],
|
| + 'notes': 'For editing moar_apis.',
|
| + 'id': 'moar_apis'
|
| + },
|
| + {
|
| + 'apiName': 'some_api',
|
| + 'owners': [
|
| + {
|
| + 'email': 'matoi@owner.tld',
|
| + 'username': 'matoi',
|
| + 'last': True
|
| + }
|
| + ],
|
| + 'notes': '',
|
| + 'id': 'some_api'
|
| + }])
|
| +
|
| +if __name__ == '__main__':
|
| + unittest.main()
|
|
|