@@ -84,7 +84,7 @@ fn complex() {
8484 false && ( false || false ) => |req| exact!( req, "Apache-2.0" ) ,
8585 true && ( false || false ) => |req| exact!( req, "MIT" ) ,
8686 true && ( false || true ) => |req| exact!( req, "MIT" ) || exact!( req, "BSD-3-Clause" ) ,
87- true && ( true || false ) => |req| exact!( req, "MIT" ) || exact!( req, "LGPL-3.0 -or-later" ) ,
87+ true && ( true || false ) => |req| exact!( req, "MIT" ) || exact!( req, "LGPL-2.1 -or-later" ) ,
8888 ] ) ;
8989}
9090
@@ -171,24 +171,13 @@ fn or_later() {
171171fn lgpl_only ( ) {
172172 check ! ( "LGPL-2.1-only" => [
173173 false => |req| exact!( req, "LGPL-2.0" ) ,
174- true => |req| exact!( req, "LGPL-2.1" ) ,
174+ false => |req| exact!( req, "LGPL-2.1" ) ,
175+ true => |req| exact!( req, "LGPL-2.1-only" ) ,
175176 false => |req| exact!( req, "LGPL-3.0" ) ,
176177 //false => |req| exact!(req, "LGPL-4.0"),
177178 ] ) ;
178179}
179180
180- #[ test]
181- fn gpl_or_later ( ) {
182- check ! ( "GPL-3.0-or-later" => [
183- false => |req| exact!( req, "GPL-1.0" ) ,
184- false => |req| exact!( req, "GPL-2.0" ) ,
185- true => |req| exact!( req, "GPL-3.0-only" ) ,
186- true => |req| exact!( req, "GPL-3.0" ) ,
187- true => |req| exact!( req, "GPL-3.0-or-later" ) ,
188- //true => |req| exact!(req, "GPL-4.0"),
189- ] ) ;
190- }
191-
192181#[ test]
193182fn gpl_or_later_plus_strict ( ) {
194183 spdx:: Expression :: parse ( "GPL-2.0+" ) . unwrap_err ( ) ;
@@ -201,104 +190,95 @@ fn gpl_or_later_plus_lax() {
201190
202191#[ test]
203192fn gpl_pedantic ( ) {
204- // | Licensee | GPL-1.0-only | GPL-1.0-or-later | GPL-2.0-only | GPL-2.0-or-later | GPL-3.0-only | GPL-3.0-or-later |
205- // | ----------------- | -- | -- | -- | -- | -- | -- |
206- // | GPL-1.0-only | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
207- // | GPL-1.0-or-later | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
208- // | GPL-2.0-only | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ |
209- // | GPL-2.0-or-later | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ |
210- // | GPL-3.0-only | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ |
211- // | GPL-3.0-or-later | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ |
212-
213193 const ONE_ONLY : & str = "GPL-1.0-only" ;
214194 const ONE_LATER : & str = "GPL-1.0-or-later" ;
215195 const TWO_ONLY : & str = "GPL-2.0-only" ;
216196 const TWO_LATER : & str = "GPL-2.0-or-later" ;
217197 const THREE_ONLY : & str = "GPL-3.0-only" ;
218198 const THREE_LATER : & str = "GPL-3.0-or-later" ;
219199
200+ const COLUMNS : & [ & str ] = & [
201+ ONE_ONLY ,
202+ ONE_LATER ,
203+ TWO_ONLY ,
204+ TWO_LATER ,
205+ THREE_ONLY ,
206+ THREE_LATER ,
207+ ] ;
208+
220209 let table = [
221- (
222- ONE_ONLY ,
223- [
224- ( ONE_ONLY , true ) ,
225- ( ONE_LATER , true ) ,
226- ( TWO_ONLY , false ) ,
227- ( TWO_LATER , false ) ,
228- ( THREE_ONLY , false ) ,
229- ( THREE_LATER , false ) ,
230- ] ,
231- ) ,
232- (
233- ONE_LATER ,
234- [
235- ( ONE_ONLY , true ) ,
236- ( ONE_LATER , true ) ,
237- ( TWO_ONLY , false ) ,
238- ( TWO_LATER , false ) ,
239- ( THREE_ONLY , false ) ,
240- ( THREE_LATER , false ) ,
241- ] ,
242- ) ,
243- (
244- TWO_ONLY ,
245- [
246- ( ONE_ONLY , false ) ,
247- ( ONE_LATER , true ) ,
248- ( TWO_ONLY , true ) ,
249- ( TWO_LATER , true ) ,
250- ( THREE_ONLY , false ) ,
251- ( THREE_LATER , false ) ,
252- ] ,
253- ) ,
254- (
255- TWO_LATER ,
256- [
257- ( ONE_ONLY , false ) ,
258- ( ONE_LATER , true ) ,
259- ( TWO_ONLY , true ) ,
260- ( TWO_LATER , true ) ,
261- ( THREE_ONLY , false ) ,
262- ( THREE_LATER , false ) ,
263- ] ,
264- ) ,
265- (
266- THREE_ONLY ,
267- [
268- ( ONE_ONLY , false ) ,
269- ( ONE_LATER , true ) ,
270- ( TWO_ONLY , false ) ,
271- ( TWO_LATER , true ) ,
272- ( THREE_ONLY , true ) ,
273- ( THREE_LATER , true ) ,
274- ] ,
275- ) ,
276- (
277- THREE_LATER ,
278- [
279- ( ONE_ONLY , false ) ,
280- ( ONE_LATER , true ) ,
281- ( TWO_ONLY , false ) ,
282- ( TWO_LATER , true ) ,
283- ( THREE_ONLY , true ) ,
284- ( THREE_LATER , true ) ,
285- ] ,
286- ) ,
210+ ( ONE_ONLY , [ true , false , false , false , false , false ] ) ,
211+ ( ONE_LATER , [ false , true , false , false , false , false ] ) ,
212+ ( TWO_ONLY , [ false , false , true , false , false , false ] ) ,
213+ ( TWO_LATER , [ false , false , false , true , false , false ] ) ,
214+ ( THREE_ONLY , [ false , false , false , false , true , false ] ) ,
215+ ( THREE_LATER , [ false , false , false , false , false , true ] ) ,
287216 ] ;
288217
218+ fn header ( s : & mut String ) {
219+ s. push_str ( "| Licensee | GPL-1.0-only | GPL-1.0-or-later | GPL-2.0-only | GPL-2.0-or-later | GPL-3.0-only | GPL-3.0-or-later |\n " ) ;
220+ s. push_str ( "| ---------------- | ------------ | ---------------- | ------------ | ---------------- | ------------ | ---------------- |\n " ) ;
221+ }
222+
223+ fn fill ( s : & mut String , c : & str , len : usize ) {
224+ for _ in 0 ..len - c. len ( ) {
225+ s. push ( ' ' ) ;
226+ }
227+ }
228+
229+ fn lic ( s : & mut String , lic : & str ) {
230+ s. push_str ( "| " ) ;
231+ s. push_str ( lic) ;
232+ fill ( s, lic, 16 ) ;
233+ s. push_str ( " | " ) ;
234+ }
235+
289236 for ( licensee, items) in table {
237+ let mut expected = String :: new ( ) ;
238+ let exp = & mut expected;
239+ header ( exp) ;
240+
241+ let mut actual = String :: new ( ) ;
242+ let act = & mut actual;
243+ header ( act) ;
244+
245+ lic ( exp, licensee) ;
246+ lic ( act, licensee) ;
247+
290248 let lic = spdx:: Licensee :: parse ( licensee) . unwrap ( ) ;
291249
292- for ( req, passes) in items {
250+ let mut fail = false ;
251+ for ( col, passes) in COLUMNS . iter ( ) . zip ( items. iter ( ) ) {
293252 let req = spdx:: LicenseReq {
294253 license : spdx:: LicenseItem :: Spdx {
295- id : spdx:: license_id ( req ) . unwrap ( ) ,
254+ id : spdx:: license_id ( col ) . unwrap ( ) ,
296255 or_later : false ,
297256 } ,
298257 exception : None ,
299258 } ;
300259
301- assert_eq ! ( lic. satisfies( & req) , passes) ;
260+ exp. push_str ( if * passes { "+" } else { "-" } ) ;
261+ fill ( exp, " " , col. len ( ) ) ;
262+
263+ exp. push_str ( " | " ) ;
264+
265+ let satisfies = lic. satisfies ( & req) ;
266+
267+ act. push_str ( if satisfies { "+" } else { "-" } ) ;
268+ fill ( act, " " , col. len ( ) ) ;
269+ act. push_str ( " | " ) ;
270+
271+ fail |= * passes != satisfies;
272+ }
273+
274+ exp. push ( '\n' ) ;
275+ act. push ( '\n' ) ;
276+
277+ if fail {
278+ panic ! (
279+ "{}" ,
280+ similar_asserts:: SimpleDiff :: from_str( exp, act, "expected" , "calculated" )
281+ ) ;
302282 }
303283 }
304284}
@@ -307,11 +287,11 @@ fn gpl_pedantic() {
307287fn gfdl ( ) {
308288 check ! ( "GFDL-1.2-or-later" => [
309289 false => |req| exact!( req, "GFDL-1.1" ) ,
310- true => |req| exact!( req, "GFDL-1.2" ) ,
311- true => |req| exact!( req, "GFDL-1.3" ) ,
290+ false => |req| exact!( req, "GFDL-1.2" ) ,
291+ false => |req| exact!( req, "GFDL-1.3" ) ,
312292 false => |req| exact!( req, "GFDL-1.1-or-later" ) ,
313293 true => |req| exact!( req, "GFDL-1.2-or-later" ) ,
314- true => |req| exact!( req, "GFDL-1.3-or-later" ) ,
294+ false => |req| exact!( req, "GFDL-1.3-or-later" ) ,
315295 ] ) ;
316296
317297 check ! ( "GFDL-1.2-invariants-or-later" => [
@@ -320,23 +300,24 @@ fn gfdl() {
320300 false => |req| exact!( req, "GFDL-1.2" ) ,
321301 true => |req| exact!( req, "GFDL-1.2-invariants-or-later" ) ,
322302 false => |req| exact!( req, "GFDL-1.3" ) ,
323- true => |req| exact!( req, "GFDL-1.3-invariants-only" ) ,
303+ false => |req| exact!( req, "GFDL-1.3-invariants-only" ) ,
324304 ] ) ;
325305
326306 check_lax ! ( "GFDL-1.1-invariants+" => [
327307 false => |req| exact!( req, "GFDL-1.1" ) ,
328308 true => |req| exact!( req, "GFDL-1.1-invariants-or-later" ) ,
329309 false => |req| exact!( req, "GFDL-1.2" ) ,
330- true => |req| exact!( req, "GFDL-1.2-invariants-or-later" ) ,
310+ false => |req| exact!( req, "GFDL-1.2-invariants-or-later" ) ,
331311 false => |req| exact!( req, "GFDL-1.3" ) ,
332- true => |req| exact!( req, "GFDL-1.3-invariants-or-later" ) ,
312+ false => |req| exact!( req, "GFDL-1.3-invariants-or-later" ) ,
333313 ] ) ;
334314
335315 check ! ( "GFDL-1.2-invariants" => [
336316 false => |req| exact!( req, "GFDL-1.1" ) ,
337317 false => |req| exact!( req, "GFDL-1.1-invariants" ) ,
338318 false => |req| exact!( req, "GFDL-1.2" ) ,
339319 true => |req| exact!( req, "GFDL-1.2-invariants" ) ,
320+ false => |req| exact!( req, "GFDL-1.2-invariants-only" ) ,
340321 false => |req| exact!( req, "GFDL-1.3" ) ,
341322 false => |req| exact!( req, "GFDL-1.3-invariants" ) ,
342323 ] ) ;
@@ -345,7 +326,8 @@ fn gfdl() {
345326 false => |req| exact!( req, "GFDL-1.1" ) ,
346327 false => |req| exact!( req, "GFDL-1.1-invariants" ) ,
347328 false => |req| exact!( req, "GFDL-1.2" ) ,
348- true => |req| exact!( req, "GFDL-1.2-invariants" ) ,
329+ false => |req| exact!( req, "GFDL-1.2-invariants" ) ,
330+ true => |req| exact!( req, "GFDL-1.2-invariants-only" ) ,
349331 false => |req| exact!( req, "GFDL-1.3" ) ,
350332 false => |req| exact!( req, "GFDL-1.3-invariants" ) ,
351333 ] ) ;
@@ -355,7 +337,8 @@ fn gfdl() {
355337 false => |req| exact!( req, "GFDL-1.1-invariants" ) ,
356338 false => |req| exact!( req, "GFDL-1.2" ) ,
357339 false => |req| exact!( req, "GFDL-1.2-invariants" ) ,
358- true => |req| exact!( req, "GFDL-1.3" ) ,
340+ false => |req| exact!( req, "GFDL-1.3" ) ,
341+ true => |req| exact!( req, "GFDL-1.3-only" ) ,
359342 false => |req| exact!( req, "GFDL-1.3-invariants" ) ,
360343 ] ) ;
361344}
0 commit comments