@@ -122,6 +122,40 @@ public void hashAllBazelTargets_ruleTargets_ruleInputsWithSelfInput() throws IOE
122122 }
123123 }
124124
125+ @ Test
126+ public void HashAllBazelTargets_generatedTargets () throws IOException , NoSuchAlgorithmException {
127+ BazelTarget generator = createRuleTarget ("rule1" , new ArrayList <String >(), "rule1Digest" );
128+ BazelTarget target = createGeneratedTarget ("rule0" , "rule1" );
129+
130+ List <String > ruleInputs = new ArrayList <>();
131+ ruleInputs .add ("rule0" );
132+ BazelTarget rule3 = createRuleTarget ("rule3" , ruleInputs , "digest" );
133+
134+ String oldHash = "" ;
135+ String newHash = "" ;
136+
137+ when (bazelClientMock .queryAllTargets ()).thenReturn (Arrays .asList (rule3 , target , generator ));
138+ TargetHashingClientImpl client = new TargetHashingClientImpl (bazelClientMock , filesClientMock );
139+ try {
140+ Map <String , String > hash = client .hashAllBazelTargetsAndSourcefiles (new HashSet <>());
141+ assertEquals (3 , hash .size ());
142+ oldHash = hash .get ("rule3" );
143+ } catch (IOException | NoSuchAlgorithmException e ) {
144+ fail (e .getMessage ());
145+ }
146+
147+ when (generator .getRule ().getDigest ()).thenReturn ("newDigest" .getBytes ());
148+ try {
149+ Map <String , String > hash = client .hashAllBazelTargetsAndSourcefiles (new HashSet <>());
150+ assertEquals (3 , hash .size ());
151+ newHash = hash .get ("rule3" );
152+ } catch (IOException | NoSuchAlgorithmException e ) {
153+ fail (e .getMessage ());
154+ }
155+
156+ assertNotEquals (oldHash , newHash );
157+ }
158+
125159 private BazelTarget createRuleTarget (String ruleName , List <String > ruleInputs , String ruleDigest ) throws NoSuchAlgorithmException {
126160 BazelTarget target = mock (BazelTarget .class );
127161 BazelRule rule = mock (BazelRule .class );
@@ -149,4 +183,14 @@ private BazelSourceFileTarget createSourceFileTarget(String name, String digest)
149183 when (target .getDigest ()).thenReturn (digest .getBytes ());
150184 return target ;
151185 }
186+
187+ private BazelTarget createGeneratedTarget (String name , String generatingRuleName ) throws NoSuchAlgorithmException {
188+ BazelTarget target = mock (BazelTarget .class );
189+ when (target .hasRule ()).thenReturn (false );
190+ when (target .hasSourceFile ()).thenReturn (false );
191+ when (target .hasGeneratedFile ()).thenReturn (true );
192+ when (target .getGeneratedFileName ()).thenReturn (name );
193+ when (target .getGeneratingRuleName ()).thenReturn (generatingRuleName );
194+ return target ;
195+ }
152196}
0 commit comments