@@ -1075,6 +1075,42 @@ func TestParseTokens(t *testing.T) {
1075
1075
},
1076
1076
"{ LEFT: { LEFT: MIT and RIGHT: Apache-1.0+ } or RIGHT: { LEFT: DocumentRef-spdx-tool-1.2:LicenseRef-MIT-Style-2 or RIGHT: GPL-2.0 with Bison-exception-2.2 } }" , nil ,
1077
1077
},
1078
+ {"operator error - missing close parenthesis" , getMissingEndParenTokens (0 ),
1079
+ & node {}, "" , errors .New ("open parenthesis does not have a matching close parenthesis" ),
1080
+ },
1081
+ {"operator error - missing open parenthesis" , getMissingStartParenTokens (0 ),
1082
+ & node {}, "" , errors .New ("close parenthesis does not have a matching open parenthesis" ),
1083
+ },
1084
+ {"operator error - missing operator" , getMissingOperatorTokens (0 ),
1085
+ & node {}, "" , errors .New ("licenses or expressions are not separated by an operator" ),
1086
+ },
1087
+ {"operator error - missing license after OR" , getMissingSecondLicenseInORTokens (0 ),
1088
+ & node {}, "" , errors .New ("expected expression following OR, but found none" ),
1089
+ },
1090
+ {"operator error - missing license after AND" , getMissingSecondLicenseInANDTokens (0 ),
1091
+ & node {}, "" , errors .New ("expected expression following AND, but found none" ),
1092
+ },
1093
+ {"operator error - starts with close parenthesis" , getStartsWithCloseParenTokens (0 ),
1094
+ & node {}, "" , errors .New ("expression starts with close parenthesis" ),
1095
+ },
1096
+ {"operator error - starts with OR" , getStartsWithORTokens (0 ),
1097
+ & node {}, "" , errors .New ("expression starts with OR" ),
1098
+ },
1099
+ {"operator error - starts with AND" , getStartsWithANDTokens (0 ),
1100
+ & node {}, "" , errors .New ("expression starts with AND" ),
1101
+ },
1102
+ {"operator error - ends with OR" , getEndsWithORTokens (0 ),
1103
+ & node {}, "" , errors .New ("expected expression following OR, but found none" ),
1104
+ },
1105
+ {"operator error - ends with AND" , getEndsWithANDTokens (0 ),
1106
+ & node {}, "" , errors .New ("expected expression following AND, but found none" ),
1107
+ },
1108
+ {"operator error - OR immediately after operator" , getDoubleORTokens (0 ),
1109
+ & node {}, "" , errors .New ("expected license or expression, but found OR" ),
1110
+ },
1111
+ {"operator error - AND immediately after operator" , getDoubleANDTokens (0 ),
1112
+ & node {}, "" , errors .New ("expected license or expression, but found AND" ),
1113
+ },
1078
1114
}
1079
1115
1080
1116
for _ , test := range tests {
@@ -1328,6 +1364,94 @@ func getKitchSinkTokens(index int) *tokenStream {
1328
1364
return getTokenStream (tokens , index )
1329
1365
}
1330
1366
1367
+ func getMissingOperatorTokens (index int ) * tokenStream {
1368
+ var tokens []token
1369
+ tokens = append (tokens , token {role : licenseToken , value : "MIT" })
1370
+ tokens = append (tokens , token {role : licenseToken , value : "Apache-2.0" })
1371
+ return getTokenStream (tokens , index )
1372
+ }
1373
+
1374
+ func getMissingSecondLicenseInORTokens (index int ) * tokenStream {
1375
+ var tokens []token
1376
+ tokens = append (tokens , token {role : licenseToken , value : "MIT" })
1377
+ tokens = append (tokens , token {role : operatorToken , value : "OR" })
1378
+ return getTokenStream (tokens , index )
1379
+ }
1380
+
1381
+ func getMissingSecondLicenseInANDTokens (index int ) * tokenStream {
1382
+ var tokens []token
1383
+ tokens = append (tokens , token {role : licenseToken , value : "MIT" })
1384
+ tokens = append (tokens , token {role : operatorToken , value : "AND" })
1385
+ return getTokenStream (tokens , index )
1386
+ }
1387
+
1388
+ func getStartsWithCloseParenTokens (index int ) * tokenStream {
1389
+ var tokens []token
1390
+ tokens = append (tokens , token {role : operatorToken , value : ")" })
1391
+ tokens = append (tokens , token {role : licenseToken , value : "MIT" })
1392
+ return getTokenStream (tokens , index )
1393
+ }
1394
+
1395
+ func getStartsWithORTokens (index int ) * tokenStream {
1396
+ var tokens []token
1397
+ tokens = append (tokens , token {role : operatorToken , value : "OR" })
1398
+ tokens = append (tokens , token {role : licenseToken , value : "MIT" })
1399
+ return getTokenStream (tokens , index )
1400
+ }
1401
+
1402
+ func getStartsWithANDTokens (index int ) * tokenStream {
1403
+ var tokens []token
1404
+ tokens = append (tokens , token {role : operatorToken , value : "AND" })
1405
+ tokens = append (tokens , token {role : licenseToken , value : "MIT" })
1406
+ return getTokenStream (tokens , index )
1407
+ }
1408
+
1409
+ func getEndsWithORTokens (index int ) * tokenStream {
1410
+ var tokens []token
1411
+ tokens = append (tokens , token {role : licenseToken , value : "MIT" })
1412
+ tokens = append (tokens , token {role : operatorToken , value : "OR" })
1413
+ return getTokenStream (tokens , index )
1414
+ }
1415
+
1416
+ func getEndsWithANDTokens (index int ) * tokenStream {
1417
+ var tokens []token
1418
+ tokens = append (tokens , token {role : licenseToken , value : "MIT" })
1419
+ tokens = append (tokens , token {role : operatorToken , value : "AND" })
1420
+ return getTokenStream (tokens , index )
1421
+ }
1422
+
1423
+ func getDoubleORTokens (index int ) * tokenStream {
1424
+ var tokens []token
1425
+ tokens = append (tokens , token {role : licenseToken , value : "MIT" })
1426
+ tokens = append (tokens , token {role : operatorToken , value : "OR" })
1427
+ tokens = append (tokens , token {role : operatorToken , value : "OR" })
1428
+ tokens = append (tokens , token {role : licenseToken , value : "Apache-2.0" })
1429
+ return getTokenStream (tokens , index )
1430
+ }
1431
+
1432
+ func getDoubleANDTokens (index int ) * tokenStream {
1433
+ var tokens []token
1434
+ tokens = append (tokens , token {role : licenseToken , value : "MIT" })
1435
+ tokens = append (tokens , token {role : operatorToken , value : "AND" })
1436
+ tokens = append (tokens , token {role : operatorToken , value : "AND" })
1437
+ tokens = append (tokens , token {role : licenseToken , value : "Apache-2.0" })
1438
+ return getTokenStream (tokens , index )
1439
+ }
1440
+
1441
+ func getMissingStartParenTokens (index int ) * tokenStream {
1442
+ var tokens []token
1443
+ tokens = append (tokens , token {role : licenseToken , value : "MIT" })
1444
+ tokens = append (tokens , token {role : operatorToken , value : ")" })
1445
+ return getTokenStream (tokens , index )
1446
+ }
1447
+
1448
+ func getMissingEndParenTokens (index int ) * tokenStream {
1449
+ var tokens []token
1450
+ tokens = append (tokens , token {role : operatorToken , value : "(" })
1451
+ tokens = append (tokens , token {role : licenseToken , value : "MIT" })
1452
+ return getTokenStream (tokens , index )
1453
+ }
1454
+
1331
1455
func getTokenStream (tokens []token , index int ) * tokenStream {
1332
1456
return & tokenStream {
1333
1457
tokens : tokens ,
0 commit comments