58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Factor
		
	
	
| 
								 | 
							
								! Copyright (C) 2009 Maxim Savchenko
							 | 
						||
| 
								 | 
							
								! See http://factorcode.org/license.txt for BSD license.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								USING: kernel accessors continuations lexer vocabs vocabs.parser
							 | 
						||
| 
								 | 
							
								       combinators.short-circuit sandbox tools.test ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								IN: sandbox.tests
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<< "sandbox.syntax" load-vocab drop >>
							 | 
						||
| 
								 | 
							
								USE: sandbox.syntax.private
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: run-script ( x lines -- y )
							 | 
						||
| 
								 | 
							
								    H{ { "kernel" "kernel" } { "math" "math" } { "sequences" "sequences" } }
							 | 
						||
| 
								 | 
							
								    parse-sandbox call( x -- x! ) ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[ 120 ]
							 | 
						||
| 
								 | 
							
								[
							 | 
						||
| 
								 | 
							
								    5
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        "! Simple factorial example"
							 | 
						||
| 
								 | 
							
								        "APPLYING: kernel math sequences ;"
							 | 
						||
| 
								 | 
							
								        "1 swap [ 1+ * ] each"
							 | 
						||
| 
								 | 
							
								    } run-script
							 | 
						||
| 
								 | 
							
								] unit-test
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[
							 | 
						||
| 
								 | 
							
								    5
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        "! Jailbreak attempt with USE:"
							 | 
						||
| 
								 | 
							
								        "USE: io"
							 | 
						||
| 
								 | 
							
								        "\"Hello world!\" print"
							 | 
						||
| 
								 | 
							
								    } run-script
							 | 
						||
| 
								 | 
							
								]
							 | 
						||
| 
								 | 
							
								[
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        [ lexer-error? ]
							 | 
						||
| 
								 | 
							
								        [ error>> condition? ]
							 | 
						||
| 
								 | 
							
								        [ error>> error>> no-word-error? ]
							 | 
						||
| 
								 | 
							
								        [ error>> error>> name>> "USE:" = ]
							 | 
						||
| 
								 | 
							
								    } 1&&
							 | 
						||
| 
								 | 
							
								] must-fail-with
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[
							 | 
						||
| 
								 | 
							
								    5
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        "! Jailbreak attempt with unauthorized APPLY:"
							 | 
						||
| 
								 | 
							
								        "APPLY: io"
							 | 
						||
| 
								 | 
							
								        "\"Hello world!\" print"
							 | 
						||
| 
								 | 
							
								    } run-script
							 | 
						||
| 
								 | 
							
								]
							 | 
						||
| 
								 | 
							
								[
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        [ lexer-error? ]
							 | 
						||
| 
								 | 
							
								        [ error>> sandbox-error? ]
							 | 
						||
| 
								 | 
							
								        [ error>> vocab>> "io" = ]
							 | 
						||
| 
								 | 
							
								    } 1&&
							 | 
						||
| 
								 | 
							
								] must-fail-with
							 |