NAME=ec fgbg
FILE==
CMDS=<<EOF
eco sepia
ecj
ecc~gui_background
ecc foo_~gui_background
EOF
EXPECT=<<EOF
{"comment":{"rgb":[240,208,144]},"usrcmt":{"rgb":[240,240,240]},"args":{"rgb":[176,176,112]},"fname":{"rgb":[176,176,112]},"floc":{"rgb":[0,255,255]},"fline":{"rgb":[192,160,96]},"flag":{"rgb":[240,240,208]},"label":{"rgb":[112,128,128]},"help":{"rgb":[160,176,112]},"flow":{"rgb":[192,160,96]},"flow2":{"rgb":[240,224,192]},"prompt":{"rgb":[144,96,0]},"offset":{"rgb":[144,96,0]},"input":{"rgb":[192,160,96]},"invalid":{"rgb":[192,96,64]},"other":{"rgb":[176,160,96]},"b0x00":{"rgb":[64,48,16]},"b0x7f":{"rgb":[240,208,144]},"b0xff":{"rgb":[144,96,0]},"math":{"rgb":[208,176,112]},"bin":{"rgb":[240,224,192]},"btext":{"rgb":[240,224,192]},"push":{"rgb":[208,176,112]},"pop":{"rgb":[176,176,112]},"crypto":{"rgb":[0,0,255]},"jmp":{"rgb":[240,224,192]},"cjmp":{"rgb":[240,224,192]},"call":{"rgb":[255,255,255]},"nop":{"rgb":[112,128,128]},"ret":{"rgb":[160,176,112]},"trap":{"rgb":[64,48,16]},"ucall":{"rgb":[255,255,255]},"ujmp":{"rgb":[240,224,192]},"swi":{"rgb":[176,176,112]},"cmp":{"rgb":[192,160,96]},"reg":{"rgb":[192,160,96]},"creg":{"rgb":[144,96,0]},"num":{"rgb":[144,96,0]},"mov":{"rgb":[208,176,112]},"func_var":{"rgb":[240,208,144]},"func_var_type":{"rgb":[128,80,0]},"func_var_addr":{"rgb":[144,96,0]},"widget_bg":{"rgb":[208,176,112]},"widget_sel":{"rgb":[0,0,0]},"meta":{"rgb":[118,118,118]},"ai.read":{"rgb":[192,176,112]},"ai.write":{"rgb":[192,160,96]},"ai.exec":{"rgb":[208,176,112]},"ai.seq":{"rgb":[144,96,0]},"ai.ascii":{"rgb":[240,224,192]},"graph.box":{"rgb":[64,48,16]},"graph.box2":{"rgb":[192,160,96]},"graph.box3":{"rgb":[192,160,96]},"graph.box4":{"rgb":[192,160,96]},"graph.true":{"rgb":[240,208,144]},"graph.false":{"rgb":[64,48,16]},"graph.ujump":{"rgb":[240,208,144]},"graph.current":{"rgb":[0,0,255]},"graph.traced":{"rgb":[0,0,255]},"diff.unknown":{"rgb":[136,23,152]},"diff.new":{"rgb":[197,15,31]},"diff.match":{"rgb":[118,118,118]},"diff.unmatch":{"rgb":[193,156,0]},"gui.cflow":{"rgb":[255,255,0]},"gui.dataoffset":{"rgb":[255,255,0]},"gui.background":{"rgb":[0,0,0]},"gui.alt_background":{"rgb":[255,255,255]},"gui.border":{"rgb":[0,0,0]},"wordhl":{"rgb":[255,0,0]},"linehl":{"rgb":[32,16,0]}}
.gui_background { color: rgb(0, 0, 0); }
.foo_gui_background { color: rgb(0, 0, 0); }
EOF
RUN

NAME=ansicon ecs
FILE==
CMDS=<<EOF
e scr.color=1
ecs
EOF
EXPECT=<<EOF
[30m[40m__[0m black
[31m[41m__[0m red
[37m[47m__[0m white
[32m[42m__[0m green
[35m[45m__[0m magenta
[33m[43m__[0m yellow
[36m[46m__[0m cyan
[34m[44m__[0m blue
[90m[100m__[0m gray
[90m[100m__[0m bblack
[91m[101m__[0m bred
[97m[107m__[0m bwhite
[92m[102m__[0m bgreen
[95m[105m__[0m bmagenta
[93m[103m__[0m byellow
[96m[106m__[0m bcyan
[94m[104m__[0m bblue
[0m[0m__[0m none
EOF
RUN

NAME=ecd and eco bright
FILE==
CMDS=<<EOF
e scr.color=1
ecd
ecl
echo
eco bright
ecl
EOF
EXPECT=<<EOF
 [31m##[0m comment             Color for code comments
 [37m##[0m usrcmt              Color for user comments
 [33m##[0m args                Color for function arguments
 [31m##[0m fname               Color for function names
 [36m##[0m floc                Color for function locations
 [36m##[0m fline               Color for function lines
 [36m##[0m flag                Color for flags
 [36m##[0m label               Color for labels
 [32m##[0m help                Color for help messages
 [36m##[0m flow                Color for control flow
 [34m##[0m flow2               Color for control flow (alternative)
 [33m##[0m prompt              Color for prompt
 [32m##[0m offset              Color for offsets
 [37m##[0m input               Color for user input
 [1;91m##[0m invalid             Color for invalid instructions
 [37m##[0m other               Color for other elements
 [32m##[0m b0x00               Color for null bytes (0x00)
 [36m##[0m b0x7f               Color for 0x7f bytes
 [31m##[0m b0xff               Color for 0xff bytes
 [33m##[0m math                Color for math operations
 [36m##[0m bin                 Color for binary information
 [33m##[0m btext               Color for text in binary
 [35m##[0m push                Color for push instructions
 [1;95m##[0m pop                 Color for pop instructions
 [44m##[0m crypto              Color for crypto instructions
 [32m##[0m jmp                 Color for jump instructions
 [32m##[0m cjmp                Color for conditional jumps
 [1;92m##[0m call                Color for call instructions
 [34m##[0m nop                 Color for nop instructions
 [31m##[0m ret                 Color for return instructions
 [1;91m##[0m trap                Color for trap/interrupt instructions
 [32m##[0m ucall               Color for unknown calls
 [32m##[0m ujmp                Color for unknown jumps
 [35m##[0m swi                 Color for software interrupts
 [36m##[0m cmp                 Color for compare instructions
 [36m##[0m reg                 Color for registers
 [36m##[0m creg                Color for changed registers
 [33m##[0m num                 Color for numbers
 [37m##[0m mov                 Color for move instructions
 [37m##[0m func_var            Color for function variables
 [34m##[0m func_var_type       Color for function variable types
 [36m##[0m func_var_addr       Color for function variable addresses
 [40m##[0m widget_bg           Color for widget background
 [41m##[0m widget_sel          Color for selected widget
 [90m##[0m meta                Color for metadata
 [32m##[0m ai.read             Color for memory read access
 [34m##[0m ai.write            Color for memory write access
 [31m##[0m ai.exec             Color for executable memory
 [35m##[0m ai.seq              Color for sequential memory
 [33m##[0m ai.ascii            Color for ASCII in memory
 [0m##[0m graph.box           Color for graph box
 [34m##[0m graph.box2          Color for graph box (alternative 2)
 [35m##[0m graph.box3          Color for graph box (alternative 3)
 [90m##[0m graph.box4          Color for graph box (alternative 4)
 [32m##[0m graph.true          Color for true branch in graph
 [31m##[0m graph.false         Color for false branch in graph
 [34m##[0m graph.ujump         Color for unknown jump in graph
 [34m##[0m graph.current       Color for current node in graph
 [33m##[0m graph.traced        Color for traced node in graph
 [35m##[0m diff.unknown        Color for unknown diff
 [31m##[0m diff.new            Color for new diff
 [90m##[0m diff.match          Color for matched diff
 [33m##[0m diff.unmatch        Color for unmatched diff
 [33m##[0m gui.cflow           Color for GUI control flow
 [33m##[0m gui.dataoffset      Color for GUI data offset
 [30m##[0m gui.background      Color for GUI background
 [37m##[0m gui.alt_background  Color for GUI alternate background
 [30m##[0m gui.border          Color for GUI border
 [41m##[0m wordhl              Color for highlighted word
 [44m##[0m linehl              Color for highlighted line

 [91m##[0m comment             Color for code comments
 [97m##[0m usrcmt              Color for user comments
 [93m##[0m args                Color for function arguments
 [91m##[0m fname               Color for function names
 [96m##[0m floc                Color for function locations
 [96m##[0m fline               Color for function lines
 [96m##[0m flag                Color for flags
 [96m##[0m label               Color for labels
 [92m##[0m help                Color for help messages
 [96m##[0m flow                Color for control flow
 [94m##[0m flow2               Color for control flow (alternative)
 [93m##[0m prompt              Color for prompt
 [92m##[0m offset              Color for offsets
 [97m##[0m input               Color for user input
 [1;91m##[0m invalid             Color for invalid instructions
 [97m##[0m other               Color for other elements
 [92m##[0m b0x00               Color for null bytes (0x00)
 [96m##[0m b0x7f               Color for 0x7f bytes
 [91m##[0m b0xff               Color for 0xff bytes
 [93m##[0m math                Color for math operations
 [96m##[0m bin                 Color for binary information
 [93m##[0m btext               Color for text in binary
 [95m##[0m push                Color for push instructions
 [1;95m##[0m pop                 Color for pop instructions
 [103m##[0m crypto              Color for crypto instructions
 [92m##[0m jmp                 Color for jump instructions
 [92m##[0m cjmp                Color for conditional jumps
 [1;92m##[0m call                Color for call instructions
 [94m##[0m nop                 Color for nop instructions
 [91m##[0m ret                 Color for return instructions
 [1;91m##[0m trap                Color for trap/interrupt instructions
 [92m##[0m ucall               Color for unknown calls
 [92m##[0m ujmp                Color for unknown jumps
 [95m##[0m swi                 Color for software interrupts
 [96m##[0m cmp                 Color for compare instructions
 [96m##[0m reg                 Color for registers
 [96m##[0m creg                Color for changed registers
 [93m##[0m num                 Color for numbers
 [97m##[0m mov                 Color for move instructions
 [97m##[0m func_var            Color for function variables
 [93m##[0m func_var_type       Color for function variable types
 [96m##[0m func_var_addr       Color for function variable addresses
 [40m##[0m widget_bg           Color for widget background
 [101m##[0m widget_sel          Color for selected widget
 [90m##[0m meta                Color for metadata
 [92m##[0m ai.read             Color for memory read access
 [94m##[0m ai.write            Color for memory write access
 [91m##[0m ai.exec             Color for executable memory
 [95m##[0m ai.seq              Color for sequential memory
 [93m##[0m ai.ascii            Color for ASCII in memory
 [94m##[0m graph.box           Color for graph box
 [92m##[0m graph.box2          Color for graph box (alternative 2)
 [95m##[0m graph.box3          Color for graph box (alternative 3)
 [90m##[0m graph.box4          Color for graph box (alternative 4)
 [92m##[0m graph.true          Color for true branch in graph
 [91m##[0m graph.false         Color for false branch in graph
 [94m##[0m graph.ujump         Color for unknown jump in graph
 [94m##[0m graph.current       Color for current node in graph
 [93m##[0m graph.traced        Color for traced node in graph
 [35m##[0m diff.unknown        Color for unknown diff
 [31m##[0m diff.new            Color for new diff
 [90m##[0m diff.match          Color for matched diff
 [33m##[0m diff.unmatch        Color for unmatched diff
 [93m##[0m gui.cflow           Color for GUI control flow
 [93m##[0m gui.dataoffset      Color for GUI data offset
 [30m##[0m gui.background      Color for GUI background
 [97m##[0m gui.alt_background  Color for GUI alternate background
 [30m##[0m gui.border          Color for GUI border
 [101m##[0m wordhl              Color for highlighted word
 [44m##[0m linehl              Color for highlighted line
EOF
RUN

NAME=ecc and attributes
FILE==
CMDS=<<EOF
eco bright
ec~pop
eco white2
ec~bin
ec~cjmp
ecc~comment
ecc~fname
EOF
EXPECT=<<EOF
 r:255 g:0   b:255  pop bold
 r:79  g:25  b:0    bin bold
 r:55  g:107 b:76   cjmp bold underline
.comment { color: rgb(0, 18, 150); font-style: italic; }
.fname { color: rgb(141, 0, 4); font-weight: bold; font-style: italic; }
EOF
RUN

NAME=ecHi
FILE==
CMDS=ecHi xxxx
EXPECT_ERR=<<EOF
ERROR: core: Unknown color xxxx
EOF
RUN

NAME=Test eco and eco. - list current theme
FILE==
CMDS=<<EOF
eco xvilka
eco.
EOF
EXPECT=<<EOF
xvilka
EOF
RUN

NAME=Test ecHw, ecHj and ecH- add and list highlight rules
FILE==
CMDS=<<EOF
ecHw eax blue
ecH
ecHj
ecH-*
ecH
EOF
EXPECT=<<EOF
ecHi rgb:00007f @ 0x00000000
[{"offset":0,"type":"ecHi","color":"#00007f"}]
EOF
RUN

NAME=Test ecp and ecn- load previous and next theme
FILE==
CMDS=<<EOF
eco sepia
eco.
ecp
eco.
ecn
eco.
EOF
EXPECT=<<EOF
sepia
rasta
sepia
EOF
RUN

NAME=Test ecoj- list themes in JSON
FILE==
CMDS=<<EOF
ecoj
EOF
EXPECT=<<EOF
["ayu","basic","behelit","bold","bright","cga","consonance","cutter","dark","darkda","default","defragger","durian","focus","gb","gentoo","lima","mars","matrix","monokai","nord","ogray","onedark","pink","rasta","sepia","smyck","solarized","tango","twilight","underwater","white","white2","xvilka","zenburn"]
EOF
RUN

NAME=ecl- list colors with descriptions
FILE==
CMDS=<<EOF
ecl~:0
ecl~:2
ecl~:3
EOF
EXPECT=<<EOF
 ## comment             Color for code comments
 ## args                Color for function arguments
 ## fname               Color for function names
EOF
RUN
