package Ġde . ma ib orn w ol ff . code chart a . importer . understand Ċ Ċ import Ġde . ma ib orn w ol ff . code chart a . model . NodeType Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . hamcrest . Matchers . greater Than OrEqualTo Ċ import Ġorg . hamcrest . Matchers . has Item Ċ import Ġorg . hamcrest . Matchers . has Size Ċ import Ġorg . spe k framework . spe k 2 . Spe k Ċ import Ġorg . spe k framework . spe k 2 . style . specification . describe Ċ Ċ class ĠUnder stand Project Builder Test Ġ: ĠSpe k ({ ĊĊĠĠĠ Ġdescribe (" Under stand Project Builder Ġfor ĠUnder stand ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġunderstand Project Builder Ġ= ĠUnder stand Project Builder ('/') ĊĊĠĠĠĠĠĠĠ Ġcontext (" reading Ġcsv Ġlines Ġfrom ĠUnder stand ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġunderstand Project Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. parse CSV Stream ( this . java Class . class Loader . getResource AsStream (" understand . csv ") !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" project Ġhas Ġnumber Ġnumber Ġof Ġfiles Ġin Ġcsv ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( project . size , Ġgreater Than OrEqualTo ( 2 2 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" leaf Ġhas Ġfile Ġattributes ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattributes Ġ= Ġproject . root Node . leaf Objects . flatMap Ġ{ Ġit . attributes . keys Ġ}. distinct () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( attributes , Ġhas Item (" r loc ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" leaf Ġhas Ġclass Ġattributes ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattributes Ġ= Ġproject . root Node . leaf Objects . flatMap Ġ{ Ġit . attributes . keys Ġ}. distinct () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( attributes , Ġhas Item (" max _ cbo ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" has Ġno Ġnodes Ġother Ġthan Ġfiles Ġand Ġfolders ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnon File Non Folder Nodes Ġ= Ġproject . root Node . nodes . values ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . type Ġ!= ĠNode Type . Folder Ġ&& Ġit . type Ġ!= ĠNode Type . File Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( non File Non Folder Nodes , Ġhas Size ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" has Ġno Ġfolder Ġnodes Ġas Ġleaves ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfolder Le aves Ġ= Ġproject . root Node . leaf Objects ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . type Ġ== ĠNode Type . Folder Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( folder Le aves , Ġhas Size ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" reading Ġcsv Ġlines Ġfrom ĠUnder stand Ġwith ĠL F Ġbreaks ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġunderstand Project Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. parse CSV Stream ( this . java Class . class Loader . getResource AsStream (" understand _ lf . csv ") !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" project Ġhas Ġnumber Ġnumber Ġof Ġfiles Ġin Ġcsv ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( project . size , Ġgreater Than OrEqualTo ( 2 2 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ