github.com/mattdotmatt/gauge@v0.3.2-0.20160421115137-425a4cdccb62/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 . "gopkg.in/check.v1" 23 ) 24 25 type specBuilder struct { 26 lines []string 27 } 28 29 func SpecBuilder() *specBuilder { 30 return &specBuilder{lines: make([]string, 0)} 31 } 32 33 func (specBuilder *specBuilder) addPrefix(prefix string, line string) string { 34 return fmt.Sprintf("%s%s\n", prefix, line) 35 } 36 37 func (specBuilder *specBuilder) String() string { 38 var result string 39 for _, line := range specBuilder.lines { 40 result = fmt.Sprintf("%s%s", result, line) 41 } 42 return result 43 } 44 45 func (specBuilder *specBuilder) specHeading(heading string) *specBuilder { 46 line := specBuilder.addPrefix("#", heading) 47 specBuilder.lines = append(specBuilder.lines, line) 48 return specBuilder 49 } 50 51 func (specBuilder *specBuilder) scenarioHeading(heading string) *specBuilder { 52 line := specBuilder.addPrefix("##", heading) 53 specBuilder.lines = append(specBuilder.lines, line) 54 return specBuilder 55 } 56 57 func (specBuilder *specBuilder) step(stepText string) *specBuilder { 58 line := specBuilder.addPrefix("* ", stepText) 59 specBuilder.lines = append(specBuilder.lines, line) 60 return specBuilder 61 } 62 63 func (specBuilder *specBuilder) tags(tags ...string) *specBuilder { 64 tagText := "" 65 for i, tag := range tags { 66 tagText = fmt.Sprintf("%s%s", tagText, tag) 67 if i != len(tags)-1 { 68 tagText = fmt.Sprintf("%s,", tagText) 69 } 70 } 71 line := specBuilder.addPrefix("tags: ", tagText) 72 specBuilder.lines = append(specBuilder.lines, line) 73 return specBuilder 74 } 75 76 func (specBuilder *specBuilder) tableHeader(cells ...string) *specBuilder { 77 return specBuilder.tableRow(cells...) 78 } 79 func (specBuilder *specBuilder) tableRow(cells ...string) *specBuilder { 80 rowInMarkdown := "|" 81 for _, cell := range cells { 82 rowInMarkdown = fmt.Sprintf("%s%s|", rowInMarkdown, cell) 83 } 84 specBuilder.lines = append(specBuilder.lines, fmt.Sprintf("%s\n", rowInMarkdown)) 85 return specBuilder 86 } 87 88 func (specBuilder *specBuilder) text(comment string) *specBuilder { 89 specBuilder.lines = append(specBuilder.lines, fmt.Sprintf("%s\n", comment)) 90 return specBuilder 91 } 92 93 func (s *MySuite) TestIsInState(c *C) { 94 c.Assert(isInState(1, 1), Equals, true) 95 c.Assert(isInState(1, 3, 2), Equals, true) 96 c.Assert(isInState(4, 1, 2), Equals, false) 97 c.Assert(isInState(4), Equals, false) 98 } 99 100 func (s *MySuite) TestIsInAnyState(c *C) { 101 c.Assert(isInAnyState(4, 4), Equals, true) 102 c.Assert(isInAnyState(4, 1, 4), Equals, true) 103 c.Assert(isInAnyState(8, 1, 3), Equals, false) 104 c.Assert(isInAnyState(8), Equals, false) 105 } 106 107 func (s *MySuite) TestRetainStates(c *C) { 108 oldState := 5 109 retainStates(&oldState, 1) 110 c.Assert(oldState, Equals, 1) 111 112 oldState = 5 113 retainStates(&oldState, 4, 1) 114 c.Assert(oldState, Equals, 5) 115 116 oldState = 8 117 retainStates(&oldState, 4, 6) 118 c.Assert(oldState, Equals, 0) 119 } 120 121 func (s *MySuite) TestAddStates(c *C) { 122 oldState := 4 123 addStates(&oldState, 1) 124 c.Assert(oldState, Equals, 5) 125 126 oldState = 8 127 addStates(&oldState, 1, 2) 128 c.Assert(oldState, Equals, 11) 129 130 oldState = 8 131 addStates(&oldState) 132 c.Assert(oldState, Equals, 8) 133 } 134 135 func (s *MySuite) TestAreUnderlinedForEmptyArray(c *C) { 136 var emptyAray []string 137 c.Assert(false, Equals, areUnderlined(emptyAray)) 138 } 139 140 func (s *MySuite) TestSpecBuilderSpecHeading(c *C) { 141 heading := SpecBuilder().specHeading("spec heading").String() 142 c.Assert(heading, Equals, "#spec heading\n") 143 } 144 145 func (s *MySuite) TestSpecBuilderScenarioHeading(c *C) { 146 heading := SpecBuilder().scenarioHeading("scenario heading").String() 147 c.Assert(heading, Equals, "##scenario heading\n") 148 } 149 150 func (s *MySuite) TestSpecBuilderStep(c *C) { 151 step := SpecBuilder().step("sample step").String() 152 c.Assert(step, Equals, "* sample step\n") 153 } 154 155 func (s *MySuite) TestSpecBuilderTags(c *C) { 156 tags := SpecBuilder().tags("tag1", "tag2").String() 157 c.Assert(tags, Equals, "tags: tag1,tag2\n") 158 } 159 160 func (s *MySuite) TestSpecBuilderWithFreeText(c *C) { 161 freeText := SpecBuilder().text("some free text").String() 162 c.Assert(freeText, Equals, "some free text\n") 163 } 164 165 func (s *MySuite) TestSpecBuilderWithSampleSpec(c *C) { 166 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") 167 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") 168 } 169 170 func (s *MySuite) TestUnescapedString(c *C) { 171 unEscapedString := GetUnescapedString("hello \n world") 172 c.Assert(unEscapedString, Equals, `hello \n world`) 173 174 unEscapedString = GetUnescapedString("hello \n \"world") 175 c.Assert(unEscapedString, Equals, `hello \n \"world`) 176 177 unEscapedString = GetUnescapedString("\"hello \n \"world\"\"") 178 c.Assert(unEscapedString, Equals, `\"hello \n \"world\"\"`) 179 180 unEscapedString = GetUnescapedString("\"\"") 181 c.Assert(unEscapedString, Equals, `\"\"`) 182 183 unEscapedString = GetUnescapedString("") 184 c.Assert(unEscapedString, Equals, "") 185 186 }