Fortran · 1891 bytes Raw Blame History
1 program test_herestring
2 use ast_types_enhanced
3 use lexer_simple
4 use parser_enhanced
5 use evaluator_simple_real
6 use shell_types
7 implicit none
8
9 type(lexer_simple_t) :: lex
10 type(parser_enhanced_t) :: pars
11 type(script_node_t) :: ast
12 type(shell_state_t) :: shell
13 type(evaluator_simple_real_t) :: eval
14 character(:), allocatable :: input
15 integer :: exit_code
16
17 ! Initialize shell state
18 shell%username = "testuser"
19 shell%hostname = "testhost"
20 shell%num_functions = 0
21 shell%num_positional = 0
22 shell%num_variables = 0
23
24 print *, "=== Test 1: Simple here string ==="
25 input = 'cat <<< "Hello from here string"'
26 call lex%init(input)
27 call lex%tokenize()
28 call pars%init(lex%tokens, lex%token_count)
29 ast = pars%parse()
30 call eval%init(shell)
31 exit_code = eval%eval(ast)
32 print *, ""
33
34 print *, "=== Test 2: Here string with variable ==="
35 input = 'MYVAR=World'
36 call lex%init(input)
37 call lex%tokenize()
38 call pars%init(lex%tokens, lex%token_count)
39 ast = pars%parse()
40 exit_code = eval%eval(ast)
41
42 input = 'cat <<< "Hello $MYVAR"'
43 call lex%init(input)
44 call lex%tokenize()
45 call pars%init(lex%tokens, lex%token_count)
46 ast = pars%parse()
47 exit_code = eval%eval(ast)
48 print *, ""
49
50 print *, "=== Test 3: Here string with word (no quotes) ==="
51 input = 'cat <<< HelloWorld'
52 call lex%init(input)
53 call lex%tokenize()
54 call pars%init(lex%tokens, lex%token_count)
55 ast = pars%parse()
56 exit_code = eval%eval(ast)
57 print *, ""
58
59 print *, "=== Test 4: Here string piped to grep ==="
60 input = 'cat <<< "apple banana cherry" | grep banana'
61 call lex%init(input)
62 call lex%tokenize()
63 call pars%init(lex%tokens, lex%token_count)
64 ast = pars%parse()
65 exit_code = eval%eval(ast)
66 print *, ""
67
68 call lex%destroy()
69 call pars%destroy()
70 call eval%destroy()
71
72 print *, "=== Here string tests completed ==="
73
74 end program test_herestring
75