1
+ require 'spec_helper'
2
+
3
+ LKP_SRC_PATH = "#{ LKP_SRC } /distro/adaptation" . freeze
4
+
5
+ def find_duplicated_lines ( default_subdir , os_specific_subdir )
6
+ default_mapping_lines = read_mappings ( default_subdir )
7
+ os_specific_mapping_lines = read_mappings ( os_specific_subdir )
8
+
9
+ default_mapping_lines & os_specific_mapping_lines
10
+ end
11
+
12
+ def read_mappings ( file_path )
13
+ File . readlines ( file_path ) . map ( &:strip ) . reject ( &:empty? )
14
+ end
15
+
16
+ def generate_mappings ( lkp_src )
17
+ mappings = Hash . new { |h , k | h [ k ] = [ ] }
18
+
19
+ # Iterate through each subdirectory in the lkp_src directory
20
+ Dir . entries ( lkp_src ) . each do |subdir |
21
+ next if subdir == '.' || subdir == '..' || subdir == 'README.md'
22
+
23
+ subdir_path = File . join ( lkp_src , subdir )
24
+ next unless File . directory? ( subdir_path )
25
+
26
+ # Get a list of files in the subdirectory
27
+ files = Dir . entries ( subdir_path ) . select do |f |
28
+ file_path = File . join ( subdir_path , f )
29
+ File . file? ( file_path ) && !File . symlink? ( file_path )
30
+ end
31
+
32
+ # Populate the mappings hash with files from the subdirectory
33
+ files . each do |file |
34
+ base_name = subdir
35
+ if file == base_name
36
+ mappings [ base_name ] . unshift ( File . join ( subdir_path , file ) )
37
+ else
38
+ mappings [ base_name ] << File . join ( subdir_path , file )
39
+ end
40
+ end
41
+ end
42
+
43
+ mappings
44
+ end
45
+
46
+ describe 'package mapping uniqueness' do
47
+ grouped_files = generate_mappings ( LKP_SRC_PATH )
48
+
49
+ grouped_files . each_value do |files |
50
+ default_file = files . first
51
+ os_specific_files = files [ 1 ..]
52
+
53
+ os_specific_files . each do |os_specific_file |
54
+ it "does not have duplicated lines between #{ default_file } and #{ os_specific_file } " do
55
+ duplicated_lines = find_duplicated_lines ( default_file , os_specific_file )
56
+ expect ( duplicated_lines ) . to be_empty , "Duplicated lines found between files:\n Default: #{ default_file } \n OS-specific: #{ os_specific_file } \n Duplicated lines: #{ duplicated_lines . join ( "\n " ) } "
57
+ end
58
+ end
59
+
60
+ os_specific_files . combination ( 2 ) . each do |os_specific_file_1 , os_specific_file_2 |
61
+ it "does not have duplicated lines between #{ os_specific_file_1 } and #{ os_specific_file_2 } " do
62
+ duplicated_lines = find_duplicated_lines ( os_specific_file_1 , os_specific_file_2 )
63
+ expect ( duplicated_lines ) . to be_empty , "Duplicated lines found between OS-specific files:\n File 1: #{ os_specific_file_1 } \n File 2: #{ os_specific_file_2 } \n Duplicated lines: #{ duplicated_lines . join ( "\n " ) } "
64
+ end
65
+ end
66
+ end
67
+ end
0 commit comments