| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package templates | 5 package templates |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "testing" | 8 "testing" |
| 9 |
| 10 "mojom/generators/go/translator" |
| 9 ) | 11 ) |
| 10 | 12 |
| 11 type mockEncodingInfo struct { | 13 type mockEncodingInfo struct { |
| 12 » IsSimple bool | 14 » translator.EncodingInfo |
| 13 » IsPointer bool | 15 » isSimple bool |
| 14 » IsHandle bool | 16 » isPointer bool |
| 15 » IsArray bool | 17 » isHandle bool |
| 16 » IsMap bool | 18 » isArray bool |
| 17 » IsNullable bool | 19 » isMap bool |
| 18 » IsStruct bool | 20 » isNullable bool |
| 19 » ElementEncodingInfo *mockEncodingInfo | 21 » isStruct bool |
| 20 » KeyEncodingInfo *mockEncodingInfo | 22 » elementEncodingInfo *mockEncodingInfo |
| 21 » ValueEncodingInfo *mockEncodingInfo | 23 » keyEncodingInfo *mockEncodingInfo |
| 22 » BitSize uint32 | 24 » valueEncodingInfo *mockEncodingInfo |
| 23 » WriteFunction string | 25 » bitSize uint32 |
| 24 » ReadFunction string | 26 » writeFunction string |
| 25 » Identifier string | 27 » readFunction string |
| 26 » GoType string | 28 » identifier string |
| 29 » goType string |
| 27 } | 30 } |
| 28 | 31 |
| 32 func (m mockEncodingInfo) IsSimple() bool { return
m.isSimple } |
| 33 func (m mockEncodingInfo) IsPointer() bool { return
m.isPointer } |
| 34 func (m mockEncodingInfo) IsHandle() bool { return
m.isHandle } |
| 35 func (m mockEncodingInfo) IsArray() bool { return
m.isArray } |
| 36 func (m mockEncodingInfo) IsMap() bool { return
m.isMap } |
| 37 func (m mockEncodingInfo) IsNullable() bool { return
m.isNullable } |
| 38 func (m mockEncodingInfo) IsStruct() bool { return
m.isStruct } |
| 39 func (m mockEncodingInfo) ElementEncodingInfo() translator.EncodingInfo { return
m.elementEncodingInfo } |
| 40 func (m mockEncodingInfo) KeyEncodingInfo() translator.EncodingInfo { return
m.keyEncodingInfo } |
| 41 func (m mockEncodingInfo) ValueEncodingInfo() translator.EncodingInfo { return
m.valueEncodingInfo } |
| 42 func (m mockEncodingInfo) BitSize() uint32 { return
m.bitSize } |
| 43 func (m mockEncodingInfo) WriteFunction() string { return
m.writeFunction } |
| 44 func (m mockEncodingInfo) ReadFunction() string { return
m.readFunction } |
| 45 func (m mockEncodingInfo) Identifier() string { return
m.identifier } |
| 46 func (m mockEncodingInfo) GoType() string { return
m.goType } |
| 47 |
| 29 func TestEncodingSimpleFieldEncoding(t *testing.T) { | 48 func TestEncodingSimpleFieldEncoding(t *testing.T) { |
| 30 expected := `if err := encoder.WriteUint8(s.Fuint8); err != nil { | 49 expected := `if err := encoder.WriteUint8(s.Fuint8); err != nil { |
| 31 return err | 50 return err |
| 32 }` | 51 }` |
| 33 | 52 |
| 34 encodingInfo := mockEncodingInfo{ | 53 encodingInfo := mockEncodingInfo{ |
| 35 » » IsSimple: true, | 54 » » isSimple: true, |
| 36 » » Identifier: "s.Fuint8", | 55 » » identifier: "s.Fuint8", |
| 37 » » WriteFunction: "WriteUint8", | 56 » » writeFunction: "WriteUint8", |
| 38 } | 57 } |
| 39 | 58 |
| 40 check(t, expected, "FieldEncodingTmpl", encodingInfo) | 59 check(t, expected, "FieldEncodingTmpl", encodingInfo) |
| 41 } | 60 } |
| 42 | 61 |
| 43 func TestEncodingHandleFieldEncoding(t *testing.T) { | 62 func TestEncodingHandleFieldEncoding(t *testing.T) { |
| 44 expected := `if err := encoder.WriteHandle(s.SomeHandle); err != nil { | 63 expected := `if err := encoder.WriteHandle(s.SomeHandle); err != nil { |
| 45 return err | 64 return err |
| 46 }` | 65 }` |
| 47 | 66 |
| 48 encodingInfo := mockEncodingInfo{ | 67 encodingInfo := mockEncodingInfo{ |
| 49 » » IsHandle: true, | 68 » » isHandle: true, |
| 50 » » Identifier: "s.SomeHandle", | 69 » » identifier: "s.SomeHandle", |
| 51 } | 70 } |
| 52 | 71 |
| 53 check(t, expected, "FieldEncodingTmpl", encodingInfo) | 72 check(t, expected, "FieldEncodingTmpl", encodingInfo) |
| 54 } | 73 } |
| 55 | 74 |
| 56 func TestEncodingNullableHandleFieldEncoding(t *testing.T) { | 75 func TestEncodingNullableHandleFieldEncoding(t *testing.T) { |
| 57 expected := `if s.SomeHandle == nil { | 76 expected := `if s.SomeHandle == nil { |
| 58 encoder.WriteInvalidHandle() | 77 encoder.WriteInvalidHandle() |
| 59 } else { | 78 } else { |
| 60 if err := encoder.WriteHandle(*(s.SomeHandle)); err != nil { | 79 if err := encoder.WriteHandle(*(s.SomeHandle)); err != nil { |
| 61 return err | 80 return err |
| 62 } | 81 } |
| 63 }` | 82 }` |
| 64 | 83 |
| 65 encodingInfo := mockEncodingInfo{ | 84 encodingInfo := mockEncodingInfo{ |
| 66 » » IsHandle: true, | 85 » » isHandle: true, |
| 67 » » Identifier: "s.SomeHandle", | 86 » » identifier: "s.SomeHandle", |
| 68 » » IsNullable: true, | 87 » » isNullable: true, |
| 69 } | 88 } |
| 70 | 89 |
| 71 check(t, expected, "FieldEncodingTmpl", encodingInfo) | 90 check(t, expected, "FieldEncodingTmpl", encodingInfo) |
| 72 } | 91 } |
| 73 | 92 |
| 74 func TestEncodingStringFieldEncoding(t *testing.T) { | 93 func TestEncodingStringFieldEncoding(t *testing.T) { |
| 75 expected := `if err := encoder.WritePointer(); err != nil { | 94 expected := `if err := encoder.WritePointer(); err != nil { |
| 76 return err | 95 return err |
| 77 } | 96 } |
| 78 if err := encoder.WriteString(s.FString); err != nil { | 97 if err := encoder.WriteString(s.FString); err != nil { |
| 79 return err | 98 return err |
| 80 }` | 99 }` |
| 81 | 100 |
| 82 encodingInfo := mockEncodingInfo{ | 101 encodingInfo := mockEncodingInfo{ |
| 83 » » IsSimple: true, | 102 » » isSimple: true, |
| 84 » » Identifier: "s.FString", | 103 » » identifier: "s.FString", |
| 85 » » WriteFunction: "WriteString", | 104 » » writeFunction: "WriteString", |
| 86 » » IsPointer: true, | 105 » » isPointer: true, |
| 87 } | 106 } |
| 88 | 107 |
| 89 check(t, expected, "FieldEncodingTmpl", encodingInfo) | 108 check(t, expected, "FieldEncodingTmpl", encodingInfo) |
| 90 } | 109 } |
| 91 | 110 |
| 92 func TestEncodingNullableStringFieldEncoding(t *testing.T) { | 111 func TestEncodingNullableStringFieldEncoding(t *testing.T) { |
| 93 expected := `if s.FString == nil { | 112 expected := `if s.FString == nil { |
| 94 encoder.WriteNullPointer() | 113 encoder.WriteNullPointer() |
| 95 } else { | 114 } else { |
| 96 if err := encoder.WritePointer(); err != nil { | 115 if err := encoder.WritePointer(); err != nil { |
| 97 return err | 116 return err |
| 98 } | 117 } |
| 99 if err := encoder.WriteString(s.FString); err != nil { | 118 if err := encoder.WriteString(s.FString); err != nil { |
| 100 return err | 119 return err |
| 101 } | 120 } |
| 102 }` | 121 }` |
| 103 | 122 |
| 104 encodingInfo := mockEncodingInfo{ | 123 encodingInfo := mockEncodingInfo{ |
| 105 » » IsSimple: true, | 124 » » isSimple: true, |
| 106 » » Identifier: "s.FString", | 125 » » identifier: "s.FString", |
| 107 » » WriteFunction: "WriteString", | 126 » » writeFunction: "WriteString", |
| 108 » » IsPointer: true, | 127 » » isPointer: true, |
| 109 » » IsNullable: true, | 128 » » isNullable: true, |
| 110 } | 129 } |
| 111 | 130 |
| 112 check(t, expected, "FieldEncodingTmpl", encodingInfo) | 131 check(t, expected, "FieldEncodingTmpl", encodingInfo) |
| 113 } | 132 } |
| 114 | 133 |
| 115 func TestEncodingArrayOfArrayOfUint16(t *testing.T) { | 134 func TestEncodingArrayOfArrayOfUint16(t *testing.T) { |
| 116 expected := `if err := encoder.WritePointer(); err != nil { | 135 expected := `if err := encoder.WritePointer(); err != nil { |
| 117 return err | 136 return err |
| 118 } | 137 } |
| 119 encoder.StartArray(uint32(len(s.ArrayOfArrayOfInt)), 64) | 138 encoder.StartArray(uint32(len(s.ArrayOfArrayOfInt)), 64) |
| 120 for _, elem0 := range s.ArrayOfArrayOfInt { | 139 for _, elem0 := range s.ArrayOfArrayOfInt { |
| 121 if err := encoder.WritePointer(); err != nil { | 140 if err := encoder.WritePointer(); err != nil { |
| 122 return err | 141 return err |
| 123 } | 142 } |
| 124 encoder.StartArray(uint32(len(elem0)), 16) | 143 encoder.StartArray(uint32(len(elem0)), 16) |
| 125 for _, elem1 := range elem0 { | 144 for _, elem1 := range elem0 { |
| 126 if err := encoder.WriteUint16(elem1); err != nil { | 145 if err := encoder.WriteUint16(elem1); err != nil { |
| 127 return err | 146 return err |
| 128 } | 147 } |
| 129 } | 148 } |
| 130 if err := encoder.Finish(); err != nil { | 149 if err := encoder.Finish(); err != nil { |
| 131 return err | 150 return err |
| 132 } | 151 } |
| 133 } | 152 } |
| 134 if err := encoder.Finish(); err != nil { | 153 if err := encoder.Finish(); err != nil { |
| 135 return err | 154 return err |
| 136 }` | 155 }` |
| 137 | 156 |
| 138 encodingInfo := mockEncodingInfo{ | 157 encodingInfo := mockEncodingInfo{ |
| 139 » » IsPointer: true, | 158 » » isPointer: true, |
| 140 » » IsArray: true, | 159 » » isArray: true, |
| 141 » » Identifier: "s.ArrayOfArrayOfInt", | 160 » » identifier: "s.ArrayOfArrayOfInt", |
| 142 » » ElementEncodingInfo: &mockEncodingInfo{ | 161 » » elementEncodingInfo: &mockEncodingInfo{ |
| 143 » » » IsPointer: true, | 162 » » » isPointer: true, |
| 144 » » » IsArray: true, | 163 » » » isArray: true, |
| 145 » » » BitSize: 64, | 164 » » » bitSize: 64, |
| 146 » » » Identifier: "elem0", | 165 » » » identifier: "elem0", |
| 147 » » » ElementEncodingInfo: &mockEncodingInfo{ | 166 » » » elementEncodingInfo: &mockEncodingInfo{ |
| 148 » » » » IsSimple: true, | 167 » » » » isSimple: true, |
| 149 » » » » BitSize: 16, | 168 » » » » bitSize: 16, |
| 150 » » » » WriteFunction: "WriteUint16", | 169 » » » » writeFunction: "WriteUint16", |
| 151 » » » » Identifier: "elem1", | 170 » » » » identifier: "elem1", |
| 152 }, | 171 }, |
| 153 }, | 172 }, |
| 154 } | 173 } |
| 155 | 174 |
| 156 check(t, expected, "FieldEncodingTmpl", encodingInfo) | 175 check(t, expected, "FieldEncodingTmpl", encodingInfo) |
| 157 } | 176 } |
| 158 | 177 |
| 159 func TestEncodingMapUint16ToInt32(t *testing.T) { | 178 func TestEncodingMapUint16ToInt32(t *testing.T) { |
| 160 expected := `if err := encoder.WritePointer(); err != nil { | 179 expected := `if err := encoder.WritePointer(); err != nil { |
| 161 return err | 180 return err |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 } | 215 } |
| 197 if err := encoder.Finish(); err != nil { | 216 if err := encoder.Finish(); err != nil { |
| 198 return err | 217 return err |
| 199 } | 218 } |
| 200 } | 219 } |
| 201 if err := encoder.Finish(); err != nil { | 220 if err := encoder.Finish(); err != nil { |
| 202 return err | 221 return err |
| 203 }` | 222 }` |
| 204 | 223 |
| 205 encodingInfo := mockEncodingInfo{ | 224 encodingInfo := mockEncodingInfo{ |
| 206 » » IsPointer: true, | 225 » » isPointer: true, |
| 207 » » IsMap: true, | 226 » » isMap: true, |
| 208 » » Identifier: "s.MapUint16ToInt32", | 227 » » identifier: "s.MapUint16ToInt32", |
| 209 » » KeyEncodingInfo: &mockEncodingInfo{ | 228 » » keyEncodingInfo: &mockEncodingInfo{ |
| 210 » » » IsPointer: true, | 229 » » » isPointer: true, |
| 211 » » » IsArray: true, | 230 » » » isArray: true, |
| 212 » » » BitSize: 64, | 231 » » » bitSize: 64, |
| 213 » » » Identifier: "keys0", | 232 » » » identifier: "keys0", |
| 214 » » » GoType: "[]uint16", | 233 » » » goType: "[]uint16", |
| 215 » » » ElementEncodingInfo: &mockEncodingInfo{ | 234 » » » elementEncodingInfo: &mockEncodingInfo{ |
| 216 » » » » IsSimple: true, | 235 » » » » isSimple: true, |
| 217 » » » » BitSize: 16, | 236 » » » » bitSize: 16, |
| 218 » » » » WriteFunction: "WriteUint16", | 237 » » » » writeFunction: "WriteUint16", |
| 219 » » » » Identifier: "key0", | 238 » » » » identifier: "key0", |
| 220 }, | 239 }, |
| 221 }, | 240 }, |
| 222 » » ValueEncodingInfo: &mockEncodingInfo{ | 241 » » valueEncodingInfo: &mockEncodingInfo{ |
| 223 » » » IsPointer: true, | 242 » » » isPointer: true, |
| 224 » » » IsArray: true, | 243 » » » isArray: true, |
| 225 » » » BitSize: 64, | 244 » » » bitSize: 64, |
| 226 » » » Identifier: "values0", | 245 » » » identifier: "values0", |
| 227 » » » GoType: "[]int32", | 246 » » » goType: "[]int32", |
| 228 » » » ElementEncodingInfo: &mockEncodingInfo{ | 247 » » » elementEncodingInfo: &mockEncodingInfo{ |
| 229 » » » » IsSimple: true, | 248 » » » » isSimple: true, |
| 230 » » » » BitSize: 32, | 249 » » » » bitSize: 32, |
| 231 » » » » WriteFunction: "WriteInt32", | 250 » » » » writeFunction: "WriteInt32", |
| 232 » » » » Identifier: "value0", | 251 » » » » identifier: "value0", |
| 233 }, | 252 }, |
| 234 }, | 253 }, |
| 235 } | 254 } |
| 236 | 255 |
| 237 check(t, expected, "FieldEncodingTmpl", encodingInfo) | 256 check(t, expected, "FieldEncodingTmpl", encodingInfo) |
| 238 } | 257 } |
| 239 | 258 |
| 240 func TestEncodingStructFieldEncoding(t *testing.T) { | 259 func TestEncodingStructFieldEncoding(t *testing.T) { |
| 241 expected := `if err := encoder.WritePointer(); err != nil { | 260 expected := `if err := encoder.WritePointer(); err != nil { |
| 242 return err | 261 return err |
| 243 } | 262 } |
| 244 if err := s.FStruct.Encode(encoder); err != nil { | 263 if err := s.FStruct.Encode(encoder); err != nil { |
| 245 return err | 264 return err |
| 246 }` | 265 }` |
| 247 | 266 |
| 248 encodingInfo := mockEncodingInfo{ | 267 encodingInfo := mockEncodingInfo{ |
| 249 » » IsPointer: true, | 268 » » isPointer: true, |
| 250 » » IsStruct: true, | 269 » » isStruct: true, |
| 251 » » Identifier: "s.FStruct", | 270 » » identifier: "s.FStruct", |
| 252 } | 271 } |
| 253 | 272 |
| 254 check(t, expected, "FieldEncodingTmpl", encodingInfo) | 273 check(t, expected, "FieldEncodingTmpl", encodingInfo) |
| 255 } | 274 } |
| 256 | 275 |
| 257 func TestEncodingNullableStructFieldEncoding(t *testing.T) { | 276 func TestEncodingNullableStructFieldEncoding(t *testing.T) { |
| 258 expected := `if s.FNullableStruct == nil { | 277 expected := `if s.FNullableStruct == nil { |
| 259 encoder.WriteNullPointer() | 278 encoder.WriteNullPointer() |
| 260 } else { | 279 } else { |
| 261 if err := encoder.WritePointer(); err != nil { | 280 if err := encoder.WritePointer(); err != nil { |
| 262 return err | 281 return err |
| 263 } | 282 } |
| 264 if err := s.FNullableStruct.Encode(encoder); err != nil { | 283 if err := s.FNullableStruct.Encode(encoder); err != nil { |
| 265 return err | 284 return err |
| 266 } | 285 } |
| 267 }` | 286 }` |
| 268 | 287 |
| 269 encodingInfo := mockEncodingInfo{ | 288 encodingInfo := mockEncodingInfo{ |
| 270 » » IsPointer: true, | 289 » » isPointer: true, |
| 271 » » IsStruct: true, | 290 » » isStruct: true, |
| 272 » » IsNullable: true, | 291 » » isNullable: true, |
| 273 » » Identifier: "s.FNullableStruct", | 292 » » identifier: "s.FNullableStruct", |
| 274 } | 293 } |
| 275 | 294 |
| 276 check(t, expected, "FieldEncodingTmpl", encodingInfo) | 295 check(t, expected, "FieldEncodingTmpl", encodingInfo) |
| 277 } | 296 } |
| OLD | NEW |