Transpiler for HTML-in-PowerShell, PSX (like JSX)
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

tests: shortcuts for common tokens

+39 -120
+39 -120
Tests.ps1
··· 5 5 6 6 . ./Compiler.ps1 7 7 8 + $OPEN_ELEMENT_START = [Token]::new( [TokenType]::OPEN_ELEMENT_START, '<' ) 9 + $EQUALS = [Token]::new( [TokenType]::EQUAL, '=' ) 10 + $CLOSE_ELEMENT = [Token]::new( [TokenType]::CLOSE_ELEMENT, '>' ) 11 + $VOID_ELEMENT_CLOSE = [Token]::new( [TokenType]::VOID_ELEMENT_CLOSE, '/>' ) 12 + $OPEN_ELEMENT_END = [Token]::new( [TokenType]::OPEN_ELEMENT_END, '</' ) 8 13 $EOF = [Token]::new( [TokenType]::EOF, '' ) 9 14 15 + function _tag_token($tag) { 16 + return [Token]::new( [TokenType]::TAG_NAME, $tag ) 17 + } 18 + 10 19 $Tests = @( 11 20 @{ 12 21 Name = "OPEN_ELEMENT_START" 13 22 Input = '<' 14 23 Expect = @( 15 - [Token]::new( 16 - [TokenType]::OPEN_ELEMENT_START, 17 - '<' 18 - ), 24 + $OPEN_ELEMENT_START, 19 25 $EOF 20 26 ) 21 27 }, ··· 23 29 Name = "Opener and tag name" 24 30 Input = "<div" 25 31 Expect = @( 26 - [Token]::new( 27 - [TokenType]::OPEN_ELEMENT_START, 28 - '<' 29 - ), 32 + $OPEN_ELEMENT_START, 30 33 [Token]::new( 31 34 [TokenType]::TAG_NAME, 32 35 'div' ··· 38 41 Name = "Empty element" 39 42 Input = "<div></div>" 40 43 Expect = @( 41 - [Token]::new( 42 - [TokenType]::OPEN_ELEMENT_START, 43 - '<' 44 - ), 45 - [Token]::new( 46 - [TokenType]::TAG_NAME, 47 - 'div' 48 - ), 49 - [Token]::new( 50 - [TokenType]::CLOSE_ELEMENT, 51 - '>' 52 - ), 53 - [Token]::new( 54 - [TokenType]::OPEN_ELEMENT_END, 55 - '</' 56 - ), 57 - [Token]::new( 58 - [TokenType]::TAG_NAME, 59 - 'div' 60 - ), 61 - [Token]::new( 62 - [TokenType]::CLOSE_ELEMENT, 63 - '>' 64 - ), 44 + $OPEN_ELEMENT_START, 45 + (_tag_token div), 46 + $CLOSE_ELEMENT, 47 + $OPEN_ELEMENT_END, 48 + (_tag_token div), 49 + $CLOSE_ELEMENT, 65 50 $EOF 66 51 ) 67 52 }, ··· 69 54 Name = "Empty void element" 70 55 Input = "<img/>" 71 56 Expect = @( 72 - [Token]::new( 73 - [TokenType]::OPEN_ELEMENT_START, 74 - '<' 75 - ), 57 + $OPEN_ELEMENT_START, 76 58 [Token]::new( 77 59 [TokenType]::TAG_NAME, 78 60 'img' 79 61 ), 80 - [Token]::new( 81 - [TokenType]::VOID_ELEMENT_CLOSE, 82 - '/>' 83 - ), 62 + $VOID_ELEMENT_CLOSE, 84 63 $EOF 85 64 ) 86 65 } ··· 88 67 Name = "Ignore extra whitespace (empty element)" 89 68 Input = "<`n`n div `t`n ></ div `n `t`r >" 90 69 Expect = @( 91 - [Token]::new( 92 - [TokenType]::OPEN_ELEMENT_START, 93 - '<' 94 - ), 70 + $OPEN_ELEMENT_START, 95 71 [Token]::new( 96 72 [TokenType]::TAG_NAME, 97 73 'div' 98 74 ), 99 - [Token]::new( 100 - [TokenType]::CLOSE_ELEMENT, 101 - '>' 102 - ), 103 - [Token]::new( 104 - [TokenType]::OPEN_ELEMENT_END, 105 - '</' 106 - ), 75 + $CLOSE_ELEMENT, 76 + $OPEN_ELEMENT_END, 107 77 [Token]::new( 108 78 [TokenType]::TAG_NAME, 109 79 'div' 110 80 ), 111 - [Token]::new( 112 - [TokenType]::CLOSE_ELEMENT, 113 - '>' 114 - ), 81 + $CLOSE_ELEMENT, 115 82 $EOF 116 83 ) 117 84 }, ··· 119 86 Name = "Empty element with attributes" 120 87 Input = "<span attr1=`"bau bau`" attr2=awa></span>" 121 88 Expect = @( 122 - [Token]::new( 123 - [TokenType]::OPEN_ELEMENT_START, 124 - '<' 125 - ), 126 - [Token]::new( 127 - [TokenType]::TAG_NAME, 128 - 'span' 129 - ), 89 + $OPEN_ELEMENT_START, 90 + (_tag_token span), 130 91 [Token]::new( 131 92 [TokenType]::ATTR_NAME, 132 93 'attr1' 133 94 ), 134 - [Token]::new( 135 - [TokenType]::EQUAL, 136 - '=' 137 - ), 95 + $EQUALS, 138 96 [Token]::new( 139 97 [TokenType]::ATTR_VALUE, 140 98 'bau bau' ··· 143 101 [TokenType]::ATTR_NAME, 144 102 'attr2' 145 103 ), 146 - [Token]::new( 147 - [TokenType]::EQUAL, 148 - '=' 149 - ), 104 + $EQUALS, 150 105 [Token]::new( 151 106 [TokenType]::ATTR_VALUE, 152 107 'awa' 153 108 ), 154 - [Token]::new( 155 - [TokenType]::CLOSE_ELEMENT, 156 - '>' 157 - ), 158 - [Token]::new( 159 - [TokenType]::OPEN_ELEMENT_END, 160 - '</' 161 - ), 162 - [Token]::new( 163 - [TokenType]::TAG_NAME, 164 - 'span' 165 - ), 166 - [Token]::new( 167 - [TokenType]::CLOSE_ELEMENT, 168 - '>' 169 - ), 109 + $CLOSE_ELEMENT, 110 + $OPEN_ELEMENT_END, 111 + (_tag_token span), 112 + $CLOSE_ELEMENT, 170 113 $EOF 171 114 ) 172 115 }, ··· 174 117 Name = "Attribute with pure scriptblock" 175 118 Input = '<img attrx={ $_ ; ''hello'' "there" """wao"""; return "<baubau knrs>" } />' 176 119 Expect = @( 177 - [Token]::new( 178 - [TokenType]::OPEN_ELEMENT_START, 179 - '<' 180 - ), 181 - [Token]::new( 182 - [TokenType]::TAG_NAME, 183 - 'img' 184 - ), 120 + $OPEN_ELEMENT_START, 121 + (_tag_token img), 185 122 [Token]::new( 186 123 [TokenType]::ATTR_NAME, 187 124 'attrx' 188 125 ), 189 - [Token]::new( 190 - [TokenType]::EQUAL, 191 - '=' 192 - ), 126 + $EQUALS, 193 127 [Token]::new( 194 128 [TokenType]::ATTR_VALUE_SCRIPTBLOCK, 195 129 ' $_ ; ''hello'' "there" """wao"""; return "<baubau knrs>" ' 196 130 ), 197 - [Token]::new( 198 - [TokenType]::VOID_ELEMENT_CLOSE, 199 - '/>' 200 - ), 131 + $VOID_ELEMENT_CLOSE, 201 132 $EOF 202 133 ) 203 134 }, ··· 205 136 Name = "Attribute with embedded scriptblock" 206 137 Input = '<img attrx="bau $( $_ )$(gci Function: )uab" />' 207 138 Expect = @( 208 - [Token]::new( 209 - [TokenType]::OPEN_ELEMENT_START, 210 - '<' 211 - ), 212 - [Token]::new( 213 - [TokenType]::TAG_NAME, 214 - 'img' 215 - ), 139 + $OPEN_ELEMENT_START, 140 + (_tag_token img), 216 141 [Token]::new( 217 142 [TokenType]::ATTR_NAME, 218 143 'attrx' 219 144 ), 220 - [Token]::new( 221 - [TokenType]::EQUAL, 222 - '=' 223 - ), 145 + $EQUALS, 224 146 [Token]::new( 225 147 [TokenType]::ATTR_VALUE, 226 148 'bau $( $_ )$(gci Function: )uab' 227 149 ), 228 - [Token]::new( 229 - [TokenType]::VOID_ELEMENT_CLOSE, 230 - '/>' 231 - ), 150 + $VOID_ELEMENT_CLOSE, 232 151 $EOF 233 152 ) 234 153 }