aboutsummaryrefslogtreecommitdiff
path: root/tests/test_copyright.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_copyright.py')
-rw-r--r--tests/test_copyright.py104
1 files changed, 104 insertions, 0 deletions
diff --git a/tests/test_copyright.py b/tests/test_copyright.py
new file mode 100644
index 0000000..888cd6e
--- /dev/null
+++ b/tests/test_copyright.py
@@ -0,0 +1,104 @@
+# Copyright 2015-2017 ARM Limited
+#
+# 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.
+#
+
+
+from datetime import date
+from glob import glob
+import os
+import re
+import unittest
+
+
+def copyright_is_valid(fname):
+ """Return True if fname has a valid copyright"""
+ with open(fname) as fin:
+ # Read the first 2K of the file. If the copyright is not there, you
+ # are probably doing something wrong
+ lines = fin.readlines(2048)
+
+ # Either the first or the second line must have a "Copyright:" line
+ first_line = re.compile(r"(#| \*) Copyright")
+ try:
+ if not first_line.search(lines[0]):
+ if first_line.search(lines[1]):
+ # Drop the first line to align the copyright to lines[0]
+ lines = lines[1:]
+ else:
+ return False
+ except IndexError:
+ return False
+
+ # The copyright mentions ARM Limited
+ if "ARM Limited" not in lines[0]:
+ return False
+
+ apache_line = 6
+ if "Google Inc" in lines[1]:
+ apache_line += 1
+
+ # The Copyright includes the current year
+ current_year = date.today().year
+ if str(current_year) not in lines[0]:
+ return False
+
+ # It's the apache license
+ if "http://www.apache.org/licenses/LICENSE-2.0" not in lines[apache_line]:
+ return False
+
+ return True
+
+
+class TestCopyRight(unittest.TestCase):
+ def test_copyrights(self):
+ """Check that all files have valid copyrights"""
+
+ tests_dir = os.path.dirname(os.path.abspath(__file__))
+ base_dir = os.path.dirname(tests_dir)
+ patterns_to_ignore = {}
+
+ for root, dirs, files in os.walk(base_dir):
+ if ".gitignore" in files:
+ fname = os.path.join(root, ".gitignore")
+ with open(fname) as fin:
+ lines = fin.readlines()
+
+ patterns_to_ignore[root] = [l.strip() for l in lines]
+
+ files_to_ignore = []
+ for directory, patterns in patterns_to_ignore.iteritems():
+ if root.startswith(directory):
+ for pat in patterns:
+ pat = os.path.join(root, pat)
+ files_to_ignore.extend(glob(pat))
+
+ for dirname in dirs:
+ full_dirname = os.path.join(root, dirname)
+ if full_dirname in files_to_ignore:
+ dirs.remove(dirname)
+
+
+ for fname in files:
+ fname = os.path.join(root, fname)
+ if fname in files_to_ignore:
+ continue
+
+ extension = os.path.splitext(fname)[1]
+ if extension in [".py", ".js", ".css"]:
+ if not copyright_is_valid(fname):
+ print("Invalid copyright in {}".format(fname))
+ self.fail()
+
+ if '.git' in dirs:
+ dirs.remove('.git')