Thread: [Codenarc-developer] ClosureAsLastMethodParameterRule - bug with double slashes; simplified?
Brought to you by:
chrismair
From: Chris M. <chr...@ea...> - 2011-06-03 02:12:19
|
Hamlet, When running the CodeNarc 0.14 snapshot against a project at work, I ran across a bug in ClosureAsLastMethodParameterRule, where it would give a false-positive violation if the closure parameter contained a string containing "//". Here is the test case I added, that initially failed with three violations: void testLinesWithStringsContainingDoubleSlash() { final SOURCE = ''' void testProcess() { shouldFail { process('xxx://wrsnetdev.usa.wachovia.net') } shouldFail(Exception) { process('http://') } shouldFail { process('http://wrsnetdev.usa.wachovia.net:xxx') } } ''' assertNoViolations(SOURCE) } I stripped out the logic in that rule that checked for comments in the source, and just base the check on the lastColumnNumber of the closure parm versus the whole method. It may be too simplistic, but it passes all of the tests, including my new test. If you get a chance, could you please take a look. If I am missing some "requirement", then we obviously need more/better tests. Chris |
From: Hamlet D'A. <ham...@gm...> - 2011-06-03 06:12:52
Attachments:
falsepositivesfix.patch
|
Shoot, I also have this patch to apply from Marcin the original author. I won't have time soon, but we should rip the tests out of the patch and see if they still pass with your changes. On Fri, Jun 3, 2011 at 4:12 AM, Chris Mair <chr...@ea...> wrote: > Hamlet, > > > > When running the CodeNarc 0.14 snapshot against a project at work, I ran > across a bug in ClosureAsLastMethodParameterRule, where it would give a > false-positive violation if the closure parameter contained a string > containing “//”. > > > > Here is the test case I added, that initially failed with three violations: > > > > void testLinesWithStringsContainingDoubleSlash() { > > final SOURCE = ''' > > void testProcess() { > > shouldFail { process('xxx://wrsnetdev.usa.wachovia.net') } > > shouldFail(Exception) { process('http://') > > } > > shouldFail { > > process('http://wrsnetdev.usa.wachovia.net:xxx') } > > } > > ''' > > assertNoViolations(SOURCE) > > } > > > > I stripped out the logic in that rule that checked for comments in the > source, and just base the check on the lastColumnNumber of the closure parm > versus the whole method. It may be too simplistic, but it passes all of the > tests, including my new test. If you get a chance, could you please take a > look. If I am missing some “requirement”, then we obviously need more/better > tests. > > > > Chris -- Hamlet D'Arcy ham...@gm... |
From: Chris M. <chr...@ea...> - 2011-06-03 21:11:45
|
I pulled in the test changes from the patch (and checked it in) and the code still passes all tests. Chris -----Original Message----- From: Hamlet D'Arcy [mailto:ham...@gm...] Sent: Friday, June 03, 2011 2:13 AM To: Chris Mair Cc: cod...@li... Subject: Re: ClosureAsLastMethodParameterRule - bug with double slashes; simplified? Shoot, I also have this patch to apply from Marcin the original author. I won't have time soon, but we should rip the tests out of the patch and see if they still pass with your changes. On Fri, Jun 3, 2011 at 4:12 AM, Chris Mair <chr...@ea...> wrote: > Hamlet, > > > > When running the CodeNarc 0.14 snapshot against a project at work, I > ran across a bug in ClosureAsLastMethodParameterRule, where it would > give a false-positive violation if the closure parameter contained a > string containing //. > > > > Here is the test case I added, that initially failed with three violations: > > > > void testLinesWithStringsContainingDoubleSlash() { > > final SOURCE = ''' > > void testProcess() { > > shouldFail { > process('xxx://wrsnetdev.usa.wachovia.net') } > > shouldFail(Exception) { process('http://') > > } > > shouldFail { > > process('http://wrsnetdev.usa.wachovia.net:xxx') } > > } > > ''' > > assertNoViolations(SOURCE) > > } > > > > I stripped out the logic in that rule that checked for comments in the > source, and just base the check on the lastColumnNumber of the closure > parm versus the whole method. It may be too simplistic, but it passes > all of the tests, including my new test. If you get a chance, could > you please take a look. If I am missing some requirement, then we > obviously need more/better tests. > > > > Chris -- Hamlet D'Arcy ham...@gm... |