@@ -14,8 +14,10 @@ def setup
1414  def  teardown 
1515    pmd_repo  =  'target/repositories/pmd' 
1616    # pre-built PMD binary 
17-     pmd_binary  =  "#{ pmd_repo }  /pmd-dist/target/pmd-bin-#{ @pmd_version }  .zip" 
18-     File . unlink  pmd_binary  if  File . exist?  pmd_binary 
17+     [ "#{ pmd_repo }  /pmd-dist/target/pmd-bin-#{ @pmd_version }  .zip" , 
18+      "#{ pmd_repo }  /pmd-dist/target/pmd-dist-#{ @pmd_version }  -bin.zip" ] . each  do  |pmd_binary |
19+       File . unlink  pmd_binary  if  File . exist?  pmd_binary 
20+     end 
1921
2022    # only deleting empty directories in order to leave pmd_repo intact 
2123    # for local dev environment, where a local pmd clone might already exist 
@@ -30,7 +32,7 @@ def test_build_skip
3032              -c  config/design.xml  -l  test/resources/pmd_report_builder/project-test.xml ] 
3133    options  =  PmdTester ::Options . new ( argv ) 
3234
33-     record_expectations ( 'sha1abc' ,  'sha1abc' ,  true ) 
35+     record_expectations ( sha1_head :  'sha1abc' ,  sha1_base :  'sha1abc' ,   zip_file_exists :  true ) 
3436    record_expectations_after_build 
3537
3638    PmdTester ::PmdReportBuilder 
@@ -51,7 +53,7 @@ def test_build_skip_ci
5153    FileUtils . mkdir_p  'target/repositories/pmd/pmd-dist/target' 
5254    FileUtils . touch  "target/repositories/pmd/pmd-dist/target/pmd-bin-#{ @pmd_version }  .zip" 
5355
54-     record_expectations ( 'sha1abc' ,  'sha1abc' ,  false ) 
56+     record_expectations ( sha1_head :  'sha1abc' ,  sha1_base :  'sha1abc' ,   zip_file_exists :  false ) 
5557    PmdTester ::Cmd . stubs ( :execute_successfully ) . with ( "unzip -qo pmd-dist/target/pmd-bin-#{ @pmd_version }  .zip"  \
5658      ' -d pmd-dist/target/exploded' ) . once 
5759    PmdTester ::Cmd . stubs ( :execute_successfully ) . with ( "mv pmd-dist/target/exploded/pmd-bin-#{ @pmd_version }  "  \
@@ -63,17 +65,37 @@ def test_build_skip_ci
6365      . build 
6466  end 
6567
68+   # with PMD7, the dist bin file is called pmd-dist/target/pmd-dist-7.0.0-bin-SNAPSHOT.zip 
69+   def  test_build_skip_ci_pmd7 
70+     projects  =  [ ] 
71+     argv  =  %w[ -r  target/repositories/pmd  -b  master  -p  pmd_releases/6.55.0 
72+               -c  config/design.xml  -l  test/resources/pmd_report_builder/project-test.xml ] 
73+     options  =  PmdTester ::Options . new ( argv ) 
74+ 
75+     FileUtils . mkdir_p  'target/repositories/pmd/pmd-dist/target' 
76+     FileUtils . touch  "target/repositories/pmd/pmd-dist/target/pmd-dist-#{ @pmd_version }  -bin.zip" 
77+ 
78+     record_expectations ( sha1_head : 'sha1abc' ,  sha1_base : 'sha1abc' ,  zip_file_exists : false ) 
79+     PmdTester ::Cmd . stubs ( :execute_successfully ) . with ( "unzip -qo pmd-dist/target/pmd-dist-#{ @pmd_version }  -bin.zip"  \
80+       ' -d pmd-dist/target/exploded' ) . once 
81+     PmdTester ::Cmd . stubs ( :execute_successfully ) . with ( "mv pmd-dist/target/exploded/pmd-bin-#{ @pmd_version }  "  \
82+       " #{ Dir . getwd }  /target/pmd-bin-#{ @pmd_version }  -master-sha1abc" ) . once 
83+     record_expectations_after_build 
84+ 
85+     PmdTester ::PmdReportBuilder 
86+       . new ( projects ,  options ,  options . base_config ,  options . base_branch ) 
87+       . build 
88+   end 
89+ 
6690  def  test_build_normal 
6791    projects  =  [ ] 
6892    argv  =  %w[ -r  target/repositories/pmd  -b  master  -p  pmd_releases/6.1.0 
6993              -c  config/design.xml  -l  test/resources/pmd_report_builder/project-test.xml ] 
7094    options  =  PmdTester ::Options . new ( argv ) 
7195
7296    # PMD binary does not exist yet this time... 
73-     record_expectations ( 'sha1abc' ,  'sha1abc' ,  false ) 
74-     PmdTester ::Cmd . stubs ( :execute_successfully ) . with ( './mvnw clean package -Dmaven.test.skip=true'  \
75-                   ' -Dmaven.javadoc.skip=true -Dmaven.source.skip=true'  \
76-                   ' -Dcheckstyle.skip=true -Dpmd.skip=true -T1C -B' ) . once 
97+     record_expectations ( sha1_head : 'sha1abc' ,  sha1_base : 'sha1abc' ,  zip_file_exists : false ) 
98+     stub_pmd_build_maven ( binary_name : "pmd-bin-#{ @pmd_version }  .zip" ) 
7799    PmdTester ::Cmd . stubs ( :execute_successfully ) . with ( "unzip -qo pmd-dist/target/pmd-bin-#{ @pmd_version }  .zip"  \
78100                  ' -d pmd-dist/target/exploded' ) . once 
79101    PmdTester ::Cmd . stubs ( :execute_successfully ) . with ( "mv pmd-dist/target/exploded/pmd-bin-#{ @pmd_version }  "  \
@@ -85,6 +107,26 @@ def test_build_normal
85107      . build 
86108  end 
87109
110+   def  test_build_normal_pmd7 
111+     projects  =  [ ] 
112+     argv  =  %w[ -r  target/repositories/pmd  -b  master  -p  pmd_releases/6.1.0 
113+               -c  config/design.xml  -l  test/resources/pmd_report_builder/project-test.xml ] 
114+     options  =  PmdTester ::Options . new ( argv ) 
115+ 
116+     # PMD binary does not exist yet this time... 
117+     record_expectations ( sha1_head : 'sha1abc' ,  sha1_base : 'sha1abc' ,  zip_file_exists : false ) 
118+     stub_pmd_build_maven ( binary_name : "pmd-dist-#{ @pmd_version }  -bin.zip" ) 
119+     PmdTester ::Cmd . stubs ( :execute_successfully ) . with ( "unzip -qo pmd-dist/target/pmd-dist-#{ @pmd_version }  -bin.zip"  \
120+                   ' -d pmd-dist/target/exploded' ) . once 
121+     PmdTester ::Cmd . stubs ( :execute_successfully ) . with ( "mv pmd-dist/target/exploded/pmd-bin-#{ @pmd_version }  "  \
122+                   " #{ Dir . getwd }  /target/pmd-bin-#{ @pmd_version }  -master-sha1abc" ) . once 
123+     record_expectations_after_build 
124+ 
125+     PmdTester ::PmdReportBuilder 
126+       . new ( projects ,  options ,  options . base_config ,  options . base_branch ) 
127+       . build 
128+   end 
129+ 
88130  def  test_build_with_projects 
89131    project_list  =  'test/resources/pmd_report_builder/project-list.xml' 
90132    projects  =  PmdTester ::ProjectsParser . new . parse ( project_list ) 
@@ -95,7 +137,7 @@ def test_build_with_projects
95137    options  =  PmdTester ::Options . new ( argv ) 
96138
97139    projects [ 0 ] . auxclasspath  =  'extra:dirs' 
98-     record_expectations ( 'sha1abc' ,  'sha1abc' ,  true ) 
140+     record_expectations ( sha1_head :  'sha1abc' ,  sha1_base :  'sha1abc' ,   zip_file_exists :  true ) 
99141    record_expectations_after_build 
100142    record_expectations_project_build ( sha1 : 'sha1abc' ) 
101143
@@ -118,7 +160,7 @@ def test_build_error_recovery
118160    options  =  PmdTester ::Options . new ( argv ) 
119161
120162    projects [ 0 ] . auxclasspath  =  'extra:dirs' 
121-     record_expectations ( 'sha1abc' ,  'sha1abc' ,  true ) 
163+     record_expectations ( sha1_head :  'sha1abc' ,  sha1_base :  'sha1abc' ,   zip_file_exists :  true ) 
122164    record_expectations_after_build 
123165    record_expectations_project_build ( sha1 : 'sha1abc' ,  error : true ) 
124166
@@ -138,7 +180,7 @@ def test_build_long_cli_options
138180    options  =  PmdTester ::Options . new ( argv ) 
139181
140182    projects [ 0 ] . auxclasspath  =  'extra:dirs' 
141-     record_expectations ( 'sha1abc' ,  'sha1abc' ,  true ) 
183+     record_expectations ( sha1_head :  'sha1abc' ,  sha1_base :  'sha1abc' ,   zip_file_exists :  true ) 
142184    record_expectations_after_build 
143185    record_expectations_project_build ( sha1 : 'sha1abc' ,  error : true ,  long_cli_options : true ) 
144186
@@ -159,7 +201,7 @@ def test_build_pmd7
159201    options  =  PmdTester ::Options . new ( argv ) 
160202
161203    projects [ 0 ] . auxclasspath  =  'extra:dirs' 
162-     record_expectations ( sha1 ,  sha1 ,  true ) 
204+     record_expectations ( sha1_head :  sha1 ,  sha1_base :  sha1 ,   zip_file_exists :  true ) 
163205    record_expectations_after_build 
164206    record_expectations_project_build ( sha1 : sha1 ,  error : true ,  long_cli_options : true , 
165207                                      no_progress_bar : true ,  base_cmd : 'pmd check' ) 
@@ -188,7 +230,7 @@ def test_build_failing
188230    options  =  PmdTester ::Options . new ( argv ) 
189231
190232    projects [ 0 ] . auxclasspath  =  'extra:dirs' 
191-     record_expectations ( 'sha1abc' ,  'sha1abc' ,  true ) 
233+     record_expectations ( sha1_head :  'sha1abc' ,  sha1_base :  'sha1abc' ,   zip_file_exists :  true ) 
192234    record_expectations_after_build 
193235    record_expectations_project_build ( sha1 : 'sha1abc' ,  error : true ,  exit_status : 1 ) 
194236
@@ -224,7 +266,7 @@ def record_expectations_project_build(sha1:, error: false, long_cli_options: fal
224266    PmdTester ::PmdReportDetail . stubs ( :create ) . once . with  {  |params | params [ :exit_code ]  == exit_status  } 
225267  end 
226268
227-   def  record_expectations ( sha1_head ,  sha1_base ,  zip_file_exists ) 
269+   def  record_expectations ( sha1_head : ,  sha1_base : ,  zip_file_exists : ) 
228270    PmdTester ::Cmd . stubs ( :execute_successfully ) . with ( 'git rev-parse master^{commit}' ) . returns ( sha1_base ) . once 
229271    # inside checkout_build_branch 
230272    PmdTester ::Cmd . stubs ( :execute_successfully ) . with ( 'git checkout master' ) 
@@ -265,4 +307,18 @@ def cleanup_pmd_dist_dir(base_dir:)
265307    File . unlink ( "#{ base_dir }  /pmd" ) 
266308    Dir . rmdir ( base_dir ) 
267309  end 
310+ 
311+   def  stub_pmd_build_maven ( binary_name :) 
312+     PmdTester ::Cmd . stubs ( :execute_successfully ) . with  do  |cmd |
313+       if  cmd  == './mvnw clean package -Dmaven.test.skip=true'  \
314+                   ' -Dmaven.javadoc.skip=true -Dmaven.source.skip=true'  \
315+                   ' -Dcheckstyle.skip=true -Dpmd.skip=true -T1C -B' 
316+         FileUtils . mkdir_p  'pmd-dist/target' 
317+         FileUtils . touch  "pmd-dist/target/#{ binary_name }  " 
318+         true 
319+       else 
320+         false 
321+       end 
322+     end . once 
323+   end 
268324end 
0 commit comments