From ce35e14694188536a786f16c4218d63dddbe824e Mon Sep 17 00:00:00 2001 From: Jonathan Bernard Date: Sun, 21 Feb 2010 15:43:24 -0600 Subject: [PATCH] Fixed ugly inheritance issue with Issue and FileIssue. Added Filter unit tests. --- libpit/project.properties | 4 +- libpit/release/pit-1.1.2.jar | Bin 25734 -> 31437 bytes libpit/session.vim | 277 ++++++++++++++++-- libpit/src/com/jdbernard/pit/FileIssue.groovy | 40 +-- .../src/com/jdbernard/pit/FileProject.groovy | 20 +- libpit/src/com/jdbernard/pit/Issue.groovy | 27 +- libpit/src/com/jdbernard/pit/Project.groovy | 6 +- .../com/jdbernard/pit/FileProjectTest.groovy | 4 + .../test/com/jdbernard/pit/FilterTest.groovy | 8 + 9 files changed, 312 insertions(+), 74 deletions(-) diff --git a/libpit/project.properties b/libpit/project.properties index 4be3177..3a77f23 100644 --- a/libpit/project.properties +++ b/libpit/project.properties @@ -1,9 +1,9 @@ -#Sat Feb 20 22:25:08 CST 2010 +#Sun Feb 21 15:42:19 CST 2010 build.dir=build src.dir=src lib.shared.dir=../shared-libs test.dir=test -build.number=53 +build.number=64 expected.application.version=1.1.2 lib.dir=lib release.dir=release diff --git a/libpit/release/pit-1.1.2.jar b/libpit/release/pit-1.1.2.jar index 195548ba004c75d43979f0bf560b73f5a7dcb0c0..0e6911399c637ce9964e54200062e90db3e4b0ad 100644 GIT binary patch delta 27660 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 VY>R<`355w20tW>p==V?7{{yK@h{yl{ delta 21921 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 diff --git a/libpit/session.vim b/libpit/session.vim index 273a759..ae6b9ff 100644 --- a/libpit/session.vim +++ b/libpit/session.vim @@ -33,15 +33,19 @@ if expand('%') == '' && !&modified && line('$') <= 1 && getline(1) == '' endif set shortmess=aoO badd +1 build.xml -badd +0 project.properties +badd +1 project.properties badd +1 src/com/jdbernard/pit/Category.groovy -badd +0 test/com/jdbernard/pit/CategoryTest.groovy +badd +1 test/com/jdbernard/pit/CategoryTest.groovy badd +1 src/com/jdbernard/pit/Filter.groovy -badd +0 test/com/jdbernard/pit/FilterTest.groovy +badd +1 test/com/jdbernard/pit/FilterTest.groovy badd +1 src/com/jdbernard/pit/Issue.groovy -badd +0 test/com/jdbernard/pit/IssueTest.groovy -badd +1 src/com/jdbernard/pit/Project.groovy -badd +0 test/com/jdbernard/pit/ProjectTest.groovy +badd +1 test/com/jdbernard/pit/IssueTest.groovy +badd +6 src/com/jdbernard/pit/Project.groovy +badd +1 test/com/jdbernard/pit/ProjectTest.groovy +badd +1 src/com/jdbernard/pit/FileIssue.groovy +badd +0 test/com/jdbernard/pit/FileIssueTest.groovy +badd +1 src/com/jdbernard/pit/FileProject.groovy +badd +0 test/com/jdbernard/pit/FileProjectTest.groovy args build.xml edit build.xml set splitbelow splitright @@ -151,7 +155,7 @@ setlocal nowinfixwidth setlocal wrap setlocal wrapmargin=0 silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 28) / 57) +let s:l = 1 - ((0 * winheight(0) + 39) / 78) if s:l < 1 | let s:l = 1 | endif exe s:l normal! zt @@ -255,14 +259,13 @@ setlocal nowinfixwidth setlocal wrap setlocal wrapmargin=0 silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 28) / 57) +let s:l = 1 - ((0 * winheight(0) + 39) / 78) if s:l < 1 | let s:l = 1 | endif exe s:l normal! zt 1 normal! 0 wincmd w -2wincmd w exe 'vert 1resize ' . ((&columns * 91 + 91) / 182) exe 'vert 2resize ' . ((&columns * 90 + 91) / 182) tabedit src/com/jdbernard/pit/Category.groovy @@ -373,7 +376,7 @@ setlocal nowinfixwidth setlocal wrap setlocal wrapmargin=0 silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 28) / 57) +let s:l = 1 - ((0 * winheight(0) + 39) / 78) if s:l < 1 | let s:l = 1 | endif exe s:l normal! zt @@ -477,14 +480,13 @@ setlocal nowinfixwidth setlocal wrap setlocal wrapmargin=0 silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 28) / 57) +let s:l = 1 - ((0 * winheight(0) + 39) / 78) if s:l < 1 | let s:l = 1 | endif exe s:l normal! zt 1 normal! 0 wincmd w -2wincmd w exe 'vert 1resize ' . ((&columns * 91 + 91) / 182) exe 'vert 2resize ' . ((&columns * 90 + 91) / 182) tabedit src/com/jdbernard/pit/Filter.groovy @@ -595,7 +597,7 @@ setlocal nowinfixwidth setlocal wrap setlocal wrapmargin=0 silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 28) / 57) +let s:l = 1 - ((0 * winheight(0) + 39) / 78) if s:l < 1 | let s:l = 1 | endif exe s:l normal! zt @@ -699,14 +701,13 @@ setlocal nowinfixwidth setlocal wrap setlocal wrapmargin=0 silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 28) / 57) +let s:l = 103 - ((26 * winheight(0) + 39) / 78) if s:l < 1 | let s:l = 1 | endif exe s:l normal! zt -1 -normal! 0 +103 +normal! 04l wincmd w -2wincmd w exe 'vert 1resize ' . ((&columns * 91 + 91) / 182) exe 'vert 2resize ' . ((&columns * 90 + 91) / 182) tabedit src/com/jdbernard/pit/Issue.groovy @@ -817,7 +818,7 @@ setlocal nowinfixwidth setlocal wrap setlocal wrapmargin=0 silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 28) / 57) +let s:l = 1 - ((0 * winheight(0) + 39) / 78) if s:l < 1 | let s:l = 1 | endif exe s:l normal! zt @@ -825,7 +826,7 @@ normal! zt normal! 0 wincmd w argglobal -edit test/com/jdbernard/pit/IssueTest.groovy +edit src/com/jdbernard/pit/Project.groovy setlocal keymap= setlocal noarabic setlocal autoindent @@ -921,17 +922,16 @@ setlocal nowinfixwidth setlocal wrap setlocal wrapmargin=0 silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 28) / 57) +let s:l = 1 - ((0 * winheight(0) + 39) / 78) if s:l < 1 | let s:l = 1 | endif exe s:l normal! zt 1 normal! 0 wincmd w -2wincmd w exe 'vert 1resize ' . ((&columns * 91 + 91) / 182) exe 'vert 2resize ' . ((&columns * 90 + 91) / 182) -tabedit src/com/jdbernard/pit/Project.groovy +tabedit src/com/jdbernard/pit/FileIssue.groovy set splitbelow splitright wincmd _ | wincmd | vsplit @@ -1039,15 +1039,15 @@ setlocal nowinfixwidth setlocal wrap setlocal wrapmargin=0 silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 28) / 57) +let s:l = 9 - ((8 * winheight(0) + 39) / 78) if s:l < 1 | let s:l = 1 | endif exe s:l normal! zt -1 -normal! 0 +9 +normal! 010l wincmd w argglobal -edit test/com/jdbernard/pit/ProjectTest.groovy +edit test/com/jdbernard/pit/FileIssueTest.groovy setlocal keymap= setlocal noarabic setlocal autoindent @@ -1143,17 +1143,238 @@ setlocal nowinfixwidth setlocal wrap setlocal wrapmargin=0 silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 28) / 57) +let s:l = 1 - ((0 * winheight(0) + 39) / 78) if s:l < 1 | let s:l = 1 | endif exe s:l normal! zt 1 normal! 0 wincmd w +exe 'vert 1resize ' . ((&columns * 91 + 91) / 182) +exe 'vert 2resize ' . ((&columns * 90 + 91) / 182) +tabedit src/com/jdbernard/pit/FileProject.groovy +set splitbelow splitright +wincmd _ | wincmd | +vsplit +1wincmd h +wincmd w +set nosplitbelow +set nosplitright +wincmd t +set winheight=1 winwidth=1 +exe 'vert 1resize ' . ((&columns * 91 + 91) / 182) +exe 'vert 2resize ' . ((&columns * 90 + 91) / 182) +argglobal +setlocal keymap= +setlocal noarabic +setlocal autoindent +setlocal balloonexpr= +setlocal nobinary +setlocal bufhidden= +setlocal buflisted +setlocal buftype= +setlocal nocindent +setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e +setlocal cinoptions= +setlocal cinwords=if,else,while,do,for,switch +setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- +setlocal commentstring=/*%s*/ +setlocal complete=.,w,b,u,t,i +setlocal completefunc= +setlocal nocopyindent +setlocal nocursorcolumn +setlocal nocursorline +setlocal define= +setlocal dictionary= +setlocal nodiff +setlocal equalprg= +setlocal errorformat= +setlocal expandtab +if &filetype != 'groovy' +setlocal filetype=groovy +endif +setlocal foldcolumn=0 +setlocal foldenable +setlocal foldexpr=0 +setlocal foldignore=# +setlocal foldlevel=0 +setlocal foldmarker={{{,}}} +setlocal foldmethod=manual +setlocal foldminlines=1 +setlocal foldnestmax=20 +setlocal foldtext=foldtext() +setlocal formatexpr= +setlocal formatoptions=tcq +setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* +setlocal grepprg= +setlocal iminsert=2 +setlocal imsearch=2 +setlocal include= +setlocal includeexpr= +setlocal indentexpr= +setlocal indentkeys=0{,0},:,0#,!^F,o,O,e +setlocal noinfercase +setlocal iskeyword=@,48-57,_,192-255 +setlocal keywordprg= +setlocal nolinebreak +setlocal nolisp +setlocal nolist +setlocal makeprg= +setlocal matchpairs=(:),{:},[:] +setlocal nomodeline +setlocal modifiable +setlocal nrformats=octal,hex +set number +setlocal number +setlocal numberwidth=4 +setlocal omnifunc= +setlocal path= +setlocal nopreserveindent +setlocal nopreviewwindow +setlocal quoteescape=\\ +setlocal noreadonly +setlocal norightleft +setlocal rightleftcmd=search +setlocal noscrollbind +setlocal shiftwidth=4 +setlocal noshortname +setlocal nosmartindent +setlocal softtabstop=0 +setlocal nospell +setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ +setlocal spellfile= +setlocal spelllang=en +setlocal statusline= +setlocal suffixesadd= +setlocal swapfile +setlocal synmaxcol=3000 +if &syntax != 'groovy' +setlocal syntax=groovy +endif +setlocal tabstop=4 +setlocal tags= +setlocal textwidth=0 +setlocal thesaurus= +setlocal nowinfixheight +setlocal nowinfixwidth +setlocal wrap +setlocal wrapmargin=0 +silent! normal! zE +let s:l = 40 - ((39 * winheight(0) + 39) / 78) +if s:l < 1 | let s:l = 1 | endif +exe s:l +normal! zt +40 +normal! 029l +wincmd w +argglobal +edit test/com/jdbernard/pit/FileProjectTest.groovy +setlocal keymap= +setlocal noarabic +setlocal autoindent +setlocal balloonexpr= +setlocal nobinary +setlocal bufhidden= +setlocal buflisted +setlocal buftype= +setlocal nocindent +setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e +setlocal cinoptions= +setlocal cinwords=if,else,while,do,for,switch +setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- +setlocal commentstring=/*%s*/ +setlocal complete=.,w,b,u,t,i +setlocal completefunc= +setlocal nocopyindent +setlocal nocursorcolumn +setlocal nocursorline +setlocal define= +setlocal dictionary= +setlocal nodiff +setlocal equalprg= +setlocal errorformat= +setlocal expandtab +if &filetype != 'groovy' +setlocal filetype=groovy +endif +setlocal foldcolumn=0 +setlocal foldenable +setlocal foldexpr=0 +setlocal foldignore=# +setlocal foldlevel=0 +setlocal foldmarker={{{,}}} +setlocal foldmethod=manual +setlocal foldminlines=1 +setlocal foldnestmax=20 +setlocal foldtext=foldtext() +setlocal formatexpr= +setlocal formatoptions=tcq +setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* +setlocal grepprg= +setlocal iminsert=2 +setlocal imsearch=2 +setlocal include= +setlocal includeexpr= +setlocal indentexpr= +setlocal indentkeys=0{,0},:,0#,!^F,o,O,e +setlocal noinfercase +setlocal iskeyword=@,48-57,_,192-255 +setlocal keywordprg= +setlocal nolinebreak +setlocal nolisp +setlocal nolist +setlocal makeprg= +setlocal matchpairs=(:),{:},[:] +setlocal nomodeline +setlocal modifiable +setlocal nrformats=octal,hex +set number +setlocal number +setlocal numberwidth=4 +setlocal omnifunc= +setlocal path= +setlocal nopreserveindent +setlocal nopreviewwindow +setlocal quoteescape=\\ +setlocal noreadonly +setlocal norightleft +setlocal rightleftcmd=search +setlocal noscrollbind +setlocal shiftwidth=4 +setlocal noshortname +setlocal nosmartindent +setlocal softtabstop=0 +setlocal nospell +setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ +setlocal spellfile= +setlocal spelllang=en +setlocal statusline= +setlocal suffixesadd= +setlocal swapfile +setlocal synmaxcol=3000 +if &syntax != 'groovy' +setlocal syntax=groovy +endif +setlocal tabstop=4 +setlocal tags= +setlocal textwidth=0 +setlocal thesaurus= +setlocal nowinfixheight +setlocal nowinfixwidth +setlocal wrap +setlocal wrapmargin=0 +silent! normal! zE +let s:l = 154 - ((77 * winheight(0) + 39) / 78) +if s:l < 1 | let s:l = 1 | endif +exe s:l +normal! zt +154 +normal! 0 +wincmd w 2wincmd w exe 'vert 1resize ' . ((&columns * 91 + 91) / 182) exe 'vert 2resize ' . ((&columns * 90 + 91) / 182) -tabnext 1 +tabnext 6 if exists('s:wipebuf') silent exe 'bwipe ' . s:wipebuf endif diff --git a/libpit/src/com/jdbernard/pit/FileIssue.groovy b/libpit/src/com/jdbernard/pit/FileIssue.groovy index 4f90c47..808c41d 100644 --- a/libpit/src/com/jdbernard/pit/FileIssue.groovy +++ b/libpit/src/com/jdbernard/pit/FileIssue.groovy @@ -4,54 +4,42 @@ import java.lang.IllegalArgumentException as IAE public class FileIssue extends Issue { - File source + protected File source - FileIssue(File file) { + public FileIssue(File file) { - /* I do not like this construction, but groovy automatically - * calls obj.setProperty(...) when you type obj.property = ... - * There is an exception for fields accessed withing the class - * that defines them, it does not catt eh setter/getter, but - * this exception does not extend to subclasses accessing member - * variables of their parent class. So instead of using Issue's - * default constructor and setting the id, category, and priority - * fields here, we have to let Issue's constructor initialize - * those values.*/ + super('REPLACE_ME') - super((file.name =~ /(\d+)([bcft])(\d).*/)[0][1], - Category.toCategory((file.name =~ /(\d+)([bcft])(\d).*/)[0][2]), - (file.name =~ /(\d+)([bcft])(\d).*/)[0][3].toInteger()) + def matcher = file.name =~ /(\d{4})([bftc])(\d).*/ + if (!matcher) return null - //def matcher = file.name =~ /(\d{4})([bftc])(\d).*/ - /*if (!matcher) return null - - id = matcher[0][1] - category = Category.toCategory(matcher[0][2]) - priority = matcher[0][3].toInteger()*/ + super.@id = matcher[0][1] + super.@category = Category.toCategory(matcher[0][2]) + super.@priority = matcher[0][3].toInteger() this.source = file - file.withReader { title = it.readLine() } text = file.text } - void setCategory(Category c) { + public void setCategory(Category c) { super.setCategory(c) source.renameTo(new File(source.canonicalFile.parentFile, getFilename())) } - void setPriority(int p) { + public void setPriority(int p) { super.setPriority(p) source.renameTo(new File(source.canonicalFile.parentFile, getFilename())) } - String getFilename() { return makeFilename(id, category, priority) } + public String getFilename() { return makeFilename(id, category, priority) } - static boolean isValidFilename(String name) { + public static boolean isValidFilename(String name) { return name ==~ /(\d+)([bcft])(\d).*/ } - static String makeFilename(String id, Category category, int priority) { + public static String makeFilename(String id, Category category, + int priority) { // bounds check priority priority = Math.min(9, Math.max(0, priority)) diff --git a/libpit/src/com/jdbernard/pit/FileProject.groovy b/libpit/src/com/jdbernard/pit/FileProject.groovy index 6d6b183..8cf441b 100644 --- a/libpit/src/com/jdbernard/pit/FileProject.groovy +++ b/libpit/src/com/jdbernard/pit/FileProject.groovy @@ -2,9 +2,9 @@ package com.jdbernard.pit class FileProject extends Project { - File source + protected File source - FileProject(File dir) { + public FileProject(File dir) { super(dir.name) if (!dir.isDirectory()) @@ -32,10 +32,6 @@ class FileProject extends Project { } } - public void rename(String newName) { - this.name = newName - } - public void setName(String name) { super.setName(name) source.renameTo(new File(source.canonicalFile.parentFile, name)) @@ -54,15 +50,21 @@ class FileProject extends Project { id = (id.toInteger() + 1).toString().padLeft(id.length(), '0') } - def issueFile = new File(source, FileIssue.makeFilename(id, options.category, options.priority)) + def issueFile = new File(source, FileIssue.makeFilename(id, + options.category, options.priority)) + assert !issueFile.exists() + issueFile.createNewFile() issueFile.write(options.text) - return new FileIssue(issueFile) + def issue = new FileIssue(issueFile) + issues[(issue.id)] = issue + + return issue } @Override - String toString() { return name } + public String toString() { return name } } diff --git a/libpit/src/com/jdbernard/pit/Issue.groovy b/libpit/src/com/jdbernard/pit/Issue.groovy index 0f2e2da..1fc2ec3 100644 --- a/libpit/src/com/jdbernard/pit/Issue.groovy +++ b/libpit/src/com/jdbernard/pit/Issue.groovy @@ -4,11 +4,10 @@ import java.lang.IllegalArgumentException as IAE public class Issue { - String id - Category category - int priority - String title - String text + protected String id + protected Category category + protected int priority + protected String text Issue(String id, Category c = Category.TASK, int p = 9) { this.id = id @@ -16,15 +15,27 @@ public class Issue { this.priority = p } - void setCategory(Category c) { + public String getId() { return id; } + + public Category getCategory() { return category } + + public void setCategory(Category c) { if (c == null) throw new IAE("Category cannot be null.") this.category = c } - void setPriority(int p) { priority = Math.min(9, Math.max(0, p)) } + public int getPriority() { return priority } + + public void setPriority(int p) { priority = Math.min(9, Math.max(0, p)) } + + public String getTitle() { return text.readLines()[0] } + + public String getText() { return text } + + public void setText(String t) { text = t } @Override - String toString() { return "${id}(${priority}): ${category} ${title}" } + public String toString() { return "${id}(${priority}): ${category} ${title}" } } diff --git a/libpit/src/com/jdbernard/pit/Project.groovy b/libpit/src/com/jdbernard/pit/Project.groovy index ec0b637..507453b 100644 --- a/libpit/src/com/jdbernard/pit/Project.groovy +++ b/libpit/src/com/jdbernard/pit/Project.groovy @@ -2,7 +2,7 @@ package com.jdbernard.pit public abstract class Project { - String name + protected String name Map issues = [:] Map projects = [:] @@ -22,6 +22,10 @@ public abstract class Project { c.call(p) } + public void setName(String name) { this.name = name } + + public String getName() { return name } + @Override String toString() { return name } diff --git a/libpit/test/com/jdbernard/pit/FileProjectTest.groovy b/libpit/test/com/jdbernard/pit/FileProjectTest.groovy index 7f0ae1d..e6b52f8 100644 --- a/libpit/test/com/jdbernard/pit/FileProjectTest.groovy +++ b/libpit/test/com/jdbernard/pit/FileProjectTest.groovy @@ -136,6 +136,7 @@ class FileProjectTest { assertEquals newIssue.text, 'A newly made bug report.\n'+ '========================\n\n' + 'Testing the Project.createNewIssue() method.' + assertEquals rootProj.issues[(newIssue.id)], newIssue //test defaults and creation of issue in an empty project newIssue = rootProj.projects.emptyproj.createNewIssue() @@ -145,6 +146,9 @@ class FileProjectTest { assertEquals newIssue.text, 'Default issue title.\n' + '====================\n' + assertEquals rootProj.projects.emptyproj.issues[(newIssue.id)], + newIssue + } } diff --git a/libpit/test/com/jdbernard/pit/FilterTest.groovy b/libpit/test/com/jdbernard/pit/FilterTest.groovy index b0cd2dd..58fed82 100644 --- a/libpit/test/com/jdbernard/pit/FilterTest.groovy +++ b/libpit/test/com/jdbernard/pit/FilterTest.groovy @@ -94,4 +94,12 @@ class FilterTest { } + @Test void testAcceptsProjectsFilter() { + + } + + @Test void testCompositeFilter() { + + } + }