2025-01-12 23:42:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  {  describe ,  it ,  expect  }  from  "vitest" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  attributeParser  from  "../src/public/app/services/attribute_parser.ts" ;  
						 
					
						
							
								
									
										
										
										
											2024-06-09 12:16:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-06-03 17:28:57 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-08-21 23:08:53 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								describe ( "Lexing" ,  ( )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-06-03 17:28:57 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    it ( "simple label" ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attributeParser . lex ( "#label" ) . map ( ( t : any )  = >  t . text ) ) . toEqual ( [ "#label" ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-21 23:08:53 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    it ( "simple label with trailing spaces" ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attributeParser . lex ( "   #label  " ) . map ( ( t : any )  = >  t . text ) ) . toEqual ( [ "#label" ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-03 17:28:57 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-04 00:04:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-07-13 23:27:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( "inherited label" ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attributeParser . lex ( "#label(inheritable)" ) . map ( ( t : any )  = >  t . text ) ) . toEqual ( [ "#label" ,  "(" ,  "inheritable" ,  ")" ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-13 23:27:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attributeParser . lex ( "#label ( inheritable ) " ) . map ( ( t : any )  = >  t . text ) ) . toEqual ( [ "#label" ,  "(" ,  "inheritable" ,  ")" ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-13 23:27:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-06-04 00:04:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( "label with value" ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attributeParser . lex ( "#label=Hallo" ) . map ( ( t : any )  = >  t . text ) ) . toEqual ( [ "#label" ,  "=" ,  "Hallo" ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-04 00:04:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-06-06 12:56:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( "label with value" ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-21 23:08:53 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const  tokens  =  attributeParser . lex ( "#label=Hallo" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-06 12:56:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( tokens [ 0 ] . startIndex ) . toEqual ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        expect ( tokens [ 0 ] . endIndex ) . toEqual ( 5 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-06-04 00:04:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( "relation with value" ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attributeParser . lex ( "~relation=#root/RclIpMauTOKS/NFi2gL4xtPxM" ) . map ( ( t : any )  = >  t . text ) ) . toEqual ( [ "~relation" ,  "=" ,  "#root/RclIpMauTOKS/NFi2gL4xtPxM" ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-04 00:04:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    it ( "use quotes to define value" ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attributeParser . lex ( "#'label a'='hello\"` world'" ) . map ( ( t : any )  = >  t . text ) ) . toEqual ( [ "#label a" ,  "=" ,  'hello"` world' ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-04 00:04:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attributeParser . lex ( '#"label a" = "hello\'` world"' ) . map ( ( t : any )  = >  t . text ) ) . toEqual ( [ "#label a" ,  "=" ,  "hello'` world" ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-04 00:04:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attributeParser . lex ( "#`label a` = `hello'\" world`" ) . map ( ( t : any )  = >  t . text ) ) . toEqual ( [ "#label a" ,  "=" ,  "hello'\" world" ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-04 00:04:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-01-12 23:53:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								describe . todo ( "Parser" ,  ( )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-06-04 00:04:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( "simple label" ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const  attrs  =  attributeParser . parse ( [ "#token" ] . map ( ( t : any )  = >  ( {  text : t  } ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-04 00:04:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        expect ( attrs . length ) . toEqual ( 1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attrs [ 0 ] . type ) . toEqual ( "label" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        expect ( attrs [ 0 ] . name ) . toEqual ( "token" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-13 23:27:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attrs [ 0 ] . isInheritable ) . toBeFalsy ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        expect ( attrs [ 0 ] . value ) . toBeFalsy ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    it ( "inherited label" ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const  attrs  =  attributeParser . parse ( [ "#token" ,  "(" ,  "inheritable" ,  ")" ] . map ( ( t : any )  = >  ( {  text : t  } ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-13 23:27:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        expect ( attrs . length ) . toEqual ( 1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attrs [ 0 ] . type ) . toEqual ( "label" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        expect ( attrs [ 0 ] . name ) . toEqual ( "token" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-13 23:27:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attrs [ 0 ] . isInheritable ) . toBeTruthy ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-04 00:04:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attrs [ 0 ] . value ) . toBeFalsy ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    it ( "label with value" ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const  attrs  =  attributeParser . parse ( [ "#token" ,  "=" ,  "val" ] . map ( ( t : any )  = >  ( {  text : t  } ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-04 00:04:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        expect ( attrs . length ) . toEqual ( 1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attrs [ 0 ] . type ) . toEqual ( "label" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        expect ( attrs [ 0 ] . name ) . toEqual ( "token" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-04 00:04:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attrs [ 0 ] . value ) . toEqual ( "val" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    it ( "relation" ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        let  attrs  =  attributeParser . parse ( [ "~token" ,  "=" ,  "#root/RclIpMauTOKS/NFi2gL4xtPxM" ] . map ( ( t : any )  = >  ( {  text : t  } ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-06 10:39:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        expect ( attrs . length ) . toEqual ( 1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attrs [ 0 ] . type ) . toEqual ( "relation" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-06 10:39:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attrs [ 0 ] . name ) . toEqual ( "token" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attrs [ 0 ] . value ) . toEqual ( "NFi2gL4xtPxM" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-06 10:39:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        attrs  =  attributeParser . parse ( [ "~token" ,  "=" ,  "#NFi2gL4xtPxM" ] . map ( ( t : any )  = >  ( {  text : t  } ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-04 00:04:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        expect ( attrs . length ) . toEqual ( 1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attrs [ 0 ] . type ) . toEqual ( "relation" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-04 00:04:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attrs [ 0 ] . name ) . toEqual ( "token" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( attrs [ 0 ] . value ) . toEqual ( "NFi2gL4xtPxM" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-04 00:04:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-17 23:54:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								describe ( "error cases" ,  ( )  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    it ( "error cases" ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( ( )  = >  attributeParser . lexAndParse ( "~token" ) ) . toThrow ( 'Relation "~token" in "~token" should point to a note.' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-04 00:04:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( ( )  = >  attributeParser . lexAndParse ( "#a&b/s" ) ) . toThrow ( ` Attribute name "a&b/s" contains disallowed characters, only alphanumeric characters, colon and underscore are allowed. ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-21 23:08:53 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-01-09 18:07:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( ( )  = >  attributeParser . lexAndParse ( "#" ) ) . toThrow ( ` Attribute name is empty, please fill the name. ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-17 23:54:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-03 17:28:57 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								} ) ;