Skip to content

Commit

Permalink
add another test for package export that reported a bug with multiple…
Browse files Browse the repository at this point in the history
… time generated packages
  • Loading branch information
badetitou committed May 3, 2024
1 parent 7160896 commit 3b004ca
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 8 deletions.
67 changes: 67 additions & 0 deletions src/Famix2Java-Tests/FAMIX2JavaVisitorTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,70 @@ public class DemoClass {
}'
]

{ #category : #test }
FAMIX2JavaVisitorTest >> testExportMultiLevelPackagesMultiHierarachyWithClassAtMultipleLevel [

| model orgClass aCompanyClass orgPackage companyPackage memory frPackage otherCompanyPackage frClass otherCompanyClass |
model := FamixJavaModel new.
frPackage := model newPackageNamed: 'fr'.
otherCompanyPackage := model newPackageNamed: 'otherCompany'.
frClass := model newClassNamed: 'FrClass'.
otherCompanyClass := model newClassNamed: 'OtherCompanyClass'.
frPackage addType: frClass.
frPackage addChildEntity: otherCompanyPackage.
otherCompanyPackage addType: otherCompanyClass.

orgPackage := model newPackageNamed: 'org'.
companyPackage := model newPackageNamed: 'company'.
orgClass := model newClassNamed: 'OrgClass'.
aCompanyClass := model newClassNamed: 'CompanyClass'.
orgPackage addType: orgClass.
orgPackage addChildEntity: companyPackage.
companyPackage addType: aCompanyClass.
"Export the model"
memory := FileSystem memory.
FAMIX2JavaVisitor new
rootFolder: (memory / 'exported') asFileReference;
export: model.
self assert: (memory / 'exported') asFileReference exists.
self assert: (memory / 'exported' / 'org') asFileReference exists.
self assert:
(memory / 'exported' / 'org') asFileReference isDirectory.
self
assert: (memory / 'exported' / 'org') asFileReference children size
equals: 2.
self assert:
(memory / 'exported' / 'org' / 'OrgClass.java') asFileReference
exists.
self assert:
(memory / 'exported' / 'org' / 'OrgClass.java') asFileReference
isFile.
self assert:
(memory / 'exported' / 'org' / 'company') asFileReference exists.
self assert:
(memory / 'exported' / 'org' / 'company') asFileReference
isDirectory.
self assert:
(memory / 'exported' / 'org' / 'company' / 'CompanyClass.java')
asFileReference exists.
self assert:
(memory / 'exported' / 'org' / 'company' / 'CompanyClass.java')
asFileReference isFile.
self assert: (memory / 'exported' / 'fr') asFileReference isDirectory.
self
assert: (memory / 'exported' / 'fr') asFileReference children size
equals: 2.
self assert:
(memory / 'exported' / 'fr' / 'FrClass.java') asFileReference isFile.

self assert:
(memory / 'exported' / 'fr' / 'otherCompany') asFileReference
isDirectory.

self assert: (memory / 'exported' / 'fr' / 'otherCompany'
/ 'OtherCompanyClass.java') asFileReference isFile
]

{ #category : #test }
FAMIX2JavaVisitorTest >> testExportMultiLevelPackagesWithClassAtMultipleLevel [

Expand All @@ -138,6 +202,9 @@ FAMIX2JavaVisitorTest >> testExportMultiLevelPackagesWithClassAtMultipleLevel [
self assert: (memory / 'exported' / 'org') asFileReference exists.
self assert:
(memory / 'exported' / 'org') asFileReference isDirectory.
self
assert: (memory / 'exported' / 'org') asFileReference children size
equals: 2.
self assert:
(memory / 'exported' / 'org' / 'OrgClass.java') asFileReference
exists.
Expand Down
25 changes: 17 additions & 8 deletions src/Famix2Java/FAMIX2JavaVisitor.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,19 @@ FAMIX2JavaVisitor >> endOfLine: anObject [
endOfLine := anObject
]

{ #category : #visiting }
FAMIX2JavaVisitor >> ensureCreateDirectoryForPackage: aFamixJavaPackage [

| folder |
folder := self rootFolder.
aFamixJavaPackage name = '<Default Package>' ifTrue: [ ^ self ].
aFamixJavaPackage allParents reverse do: [ :namespace |
folder := folder / namespace name.
folder ensureCreateDirectory ].
folder := folder / aFamixJavaPackage name.
^ folder ensureCreateDirectory
]

{ #category : #'private-exporting' }
FAMIX2JavaVisitor >> eol [
"print the end of line that can be configured"
Expand Down Expand Up @@ -465,15 +478,11 @@ FAMIX2JavaVisitor >> visitMethod: aMethod [
{ #category : #visiting }
FAMIX2JavaVisitor >> visitPackage: aFamixJavaPackage [

aFamixJavaPackage name = '<Default Package>' ifFalse: [
aFamixJavaPackage allParents reverse do: [ :namespace |
self rootFolder: self rootFolder / namespace name.
self rootFolder ensureCreateDirectory ].
self rootFolder: self rootFolder / aFamixJavaPackage name.
self rootFolder ensureCreateDirectory ].
aFamixJavaPackage types do: [ :type |
| file |
file := self rootFolder / (type name , '.java').
| file folder |
folder := self ensureCreateDirectoryForPackage: aFamixJavaPackage.

file := folder / (type name , '.java').
file deleteIfAbsent: [ ].
file writeStreamDo: [ :stream |
currentStream := stream.
Expand Down

0 comments on commit 3b004ca

Please sign in to comment.