github.com/ezbuy/gauge@v0.9.4-0.20171013092048-7ac5bd3931cd/parser/helper_test.go (about) 1 // Copyright 2015 ThoughtWorks, Inc. 2 3 // This file is part of Gauge. 4 5 // Gauge is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 10 // Gauge is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 15 // You should have received a copy of the GNU General Public License 16 // along with Gauge. If not, see <http://www.gnu.org/licenses/>. 17 18 package parser 19 20 import ( 21 "fmt" 22 23 . "gopkg.in/check.v1" 24 ) 25 26 type specBuilder struct { 27 lines []string 28 } 29 30 func SpecBuilder() *specBuilder { 31 return &specBuilder{lines: make([]string, 0)} 32 } 33 34 func (specBuilder *specBuilder) addPrefix(prefix string, line string) string { 35 return fmt.Sprintf("%s%s\n", prefix, line) 36 } 37 38 func (specBuilder *specBuilder) String() string { 39 var result string 40 for _, line := range specBuilder.lines { 41 result = fmt.Sprintf("%s%s", result, line) 42 } 43 return result 44 } 45 46 func (specBuilder *specBuilder) specHeading(heading string) *specBuilder { 47 line := specBuilder.addPrefix("#", heading) 48 specBuilder.lines = append(specBuilder.lines, line) 49 return specBuilder 50 } 51 52 func (specBuilder *specBuilder) scenarioHeading(heading string) *specBuilder { 53 line := specBuilder.addPrefix("##", heading) 54 specBuilder.lines = append(specBuilder.lines, line) 55 return specBuilder 56 } 57 58 func (specBuilder *specBuilder) step(stepText string) *specBuilder { 59 line := specBuilder.addPrefix("* ", stepText) 60 specBuilder.lines = append(specBuilder.lines, line) 61 return specBuilder 62 } 63 64 func (specBuilder *specBuilder) tags(tags ...string) *specBuilder { 65 tagText := "" 66 for i, tag := range tags { 67 tagText = fmt.Sprintf("%s%s", tagText, tag) 68 if i != len(tags)-1 { 69 tagText = fmt.Sprintf("%s,", tagText) 70 } 71 } 72 line := specBuilder.addPrefix("tags: ", tagText) 73 specBuilder.lines = append(specBuilder.lines, line) 74 return specBuilder 75 } 76 77 func (specBuilder *specBuilder) tableHeader(cells ...string) *specBuilder { 78 return specBuilder.tableRow(cells...) 79 } 80 func (specBuilder *specBuilder) tableRow(cells ...string) *specBuilder { 81 rowInMarkdown := "|" 82 for _, cell := range cells { 83 rowInMarkdown = fmt.Sprintf("%s%s|", rowInMarkdown, cell) 84 } 85 specBuilder.lines = append(specBuilder.lines, fmt.Sprintf("%s\n", rowInMarkdown)) 86 return specBuilder 87 } 88 89 func (specBuilder *specBuilder) text(comment string) *specBuilder { 90 specBuilder.lines = append(specBuilder.lines, fmt.Sprintf("%s\n", comment)) 91 return specBuilder 92 } 93 94 func (s *MySuite) TestIsInState(c *C) { 95 c.Assert(isInState(1, 1), Equals, true) 96 c.Assert(isInState(1, 3, 2), Equals, true) 97 c.Assert(isInState(4, 1, 2), Equals, false) 98 c.Assert(isInState(4), Equals, false) 99 } 100 101 func (s *MySuite) TestIsInAnyState(c *C) { 102 c.Assert(isInAnyState(4, 4), Equals, true) 103 c.Assert(isInAnyState(4, 1, 4), Equals, true) 104 c.Assert(isInAnyState(8, 1, 3), Equals, false) 105 c.Assert(isInAnyState(8), Equals, false) 106 } 107 108 func (s *MySuite) TestRetainStates(c *C) { 109 oldState := 5 110 retainStates(&oldState, 1) 111 c.Assert(oldState, Equals, 1) 112 113 oldState = 5 114 retainStates(&oldState, 4, 1) 115 c.Assert(oldState, Equals, 5) 116 117 oldState = 8 118 retainStates(&oldState, 4, 6) 119 c.Assert(oldState, Equals, 0) 120 } 121 122 func (s *MySuite) TestAddStates(c *C) { 123 oldState := 4 124 addStates(&oldState, 1) 125 c.Assert(oldState, Equals, 5) 126 127 oldState = 8 128 addStates(&oldState, 1, 2) 129 c.Assert(oldState, Equals, 11) 130 131 oldState = 8 132 addStates(&oldState) 133 c.Assert(oldState, Equals, 8) 134 } 135 136 func (s *MySuite) TestAreUnderlinedForEmptyArray(c *C) { 137 var emptyAray []string 138 c.Assert(false, Equals, areUnderlined(emptyAray)) 139 } 140 141 func (s *MySuite) TestSpecBuilderSpecHeading(c *C) { 142 heading := SpecBuilder().specHeading("spec heading").String() 143 c.Assert(heading, Equals, "#spec heading\n") 144 } 145 146 func (s *MySuite) TestSpecBuilderScenarioHeading(c *C) { 147 heading := SpecBuilder().scenarioHeading("scenario heading").String() 148 c.Assert(heading, Equals, "##scenario heading\n") 149 } 150 151 func (s *MySuite) TestSpecBuilderStep(c *C) { 152 step := SpecBuilder().step("sample step").String() 153 c.Assert(step, Equals, "* sample step\n") 154 } 155 156 func (s *MySuite) TestSpecBuilderTags(c *C) { 157 tags := SpecBuilder().tags("tag1", "tag2").String() 158 c.Assert(tags, Equals, "tags: tag1,tag2\n") 159 } 160 161 func (s *MySuite) TestSpecBuilderWithFreeText(c *C) { 162 freeText := SpecBuilder().text("some free text").String() 163 c.Assert(freeText, Equals, "some free text\n") 164 } 165 166 func (s *MySuite) TestSpecBuilderWithSampleSpec(c *C) { 167 spec := SpecBuilder().specHeading("spec heading").tags("tag1", "tag2").step("context here").scenarioHeading("scenario heading").text("comment").step("sample step").scenarioHeading("scenario 2").step("step 2") 168 c.Assert(spec.String(), Equals, "#spec heading\ntags: tag1,tag2\n* context here\n##scenario heading\ncomment\n* sample step\n##scenario 2\n* step 2\n") 169 } 170 171 func (s *MySuite) TestUnescapedString(c *C) { 172 unEscapedString := GetUnescapedString("hello \n world") 173 c.Assert(unEscapedString, Equals, `hello \n world`) 174 175 unEscapedString = GetUnescapedString("hello \n \"world") 176 c.Assert(unEscapedString, Equals, `hello \n \"world`) 177 178 unEscapedString = GetUnescapedString("\"hello \n \"world\"\"") 179 c.Assert(unEscapedString, Equals, `\"hello \n \"world\"\"`) 180 181 unEscapedString = GetUnescapedString("\"\"") 182 c.Assert(unEscapedString, Equals, `\"\"`) 183 184 unEscapedString = GetUnescapedString("") 185 c.Assert(unEscapedString, Equals, "") 186 187 }