476 lines
13 KiB
Rust
476 lines
13 KiB
Rust
use async_io::block_on;
|
|
use galaxy_core::ui::color::hex_color::coloru_from_hex_string;
|
|
use galaxy_core::ui::theme::AnsiColor;
|
|
use virtual_fs::{Stub, VirtualFS};
|
|
|
|
use super::{
|
|
AlacrittyColors, AlacrittyConfig, AlacrittyTheme, PrimaryAlacrittyColors, RecursivelyParseable,
|
|
};
|
|
use crate::settings::import::config::{ParseableConfig, ThemeType};
|
|
|
|
#[test]
|
|
fn test_parse_cobalt2() {
|
|
let cobalt2_config = "# From the famous Cobalt2 sublime theme
|
|
# Source https//github.com/wesbos/cobalt2/tree/master/Cobalt2
|
|
|
|
# Default colors
|
|
[colors.primary]
|
|
background = '#122637'
|
|
foreground = '#ffffff'
|
|
|
|
[colors.cursor]
|
|
text = '#122637'
|
|
cursor = '#f0cb09'
|
|
|
|
# Normal colors
|
|
[colors.normal]
|
|
black = '#000000'
|
|
red = '#ff0000'
|
|
green = '#37dd21'
|
|
yellow = '#fee409'
|
|
blue = '#1460d2'
|
|
magenta = '#ff005d'
|
|
cyan = '#00bbbb'
|
|
white = '#bbbbbb'
|
|
|
|
# Bright colors
|
|
[colors.bright]
|
|
black = '#545454'
|
|
red = '#f40d17'
|
|
green = '#3bcf1d'
|
|
yellow = '#ecc809'
|
|
blue = '#5555ff'
|
|
magenta = '#ff55ff'
|
|
cyan = '#6ae3f9'
|
|
white = '#ffffff'";
|
|
let config: AlacrittyConfig =
|
|
toml::from_str(cobalt2_config).expect("Should be able to parse toml!");
|
|
let ThemeType::Single(theme) = config
|
|
.colors
|
|
.expect("Should have read colors!")
|
|
.parse()
|
|
.expect("Theme should have read!")
|
|
else {
|
|
panic!("Should not have a dark and light theme for Alacritty!")
|
|
};
|
|
|
|
// Check that the three primary colors are the same.
|
|
assert_eq!(
|
|
theme.accent().into_solid(),
|
|
coloru_from_hex_string("#f0cb09").expect("Should be able to parse a color!")
|
|
);
|
|
assert_eq!(
|
|
theme.background().into_solid(),
|
|
coloru_from_hex_string("#122637").expect("Should be able to parse a color!")
|
|
);
|
|
assert_eq!(
|
|
theme.foreground().into_solid(),
|
|
coloru_from_hex_string("#ffffff").expect("Should be able to parse a color!")
|
|
);
|
|
|
|
// Check some terminal colors.
|
|
assert_eq!(
|
|
theme.terminal_colors().bright.yellow,
|
|
AnsiColor {
|
|
r: 0xec,
|
|
g: 0xc8,
|
|
b: 0x09
|
|
}
|
|
);
|
|
assert_eq!(
|
|
theme.terminal_colors().bright.cyan,
|
|
AnsiColor {
|
|
r: 0x6a,
|
|
g: 0xe3,
|
|
b: 0xf9
|
|
}
|
|
);
|
|
assert_eq!(
|
|
theme.terminal_colors().normal.yellow,
|
|
AnsiColor {
|
|
r: 0xfe,
|
|
g: 0xe4,
|
|
b: 0x09
|
|
}
|
|
);
|
|
assert_eq!(
|
|
theme.terminal_colors().normal.cyan,
|
|
AnsiColor {
|
|
r: 0x00,
|
|
g: 0xbb,
|
|
b: 0xbb
|
|
}
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_parse_cobalt2_missing_color() {
|
|
let cobalt2_config = "# From the famous Cobalt2 sublime theme
|
|
# Source https//github.com/wesbos/cobalt2/tree/master/Cobalt2
|
|
|
|
# Default colors
|
|
[colors.primary]
|
|
background = '#122637'
|
|
foreground = '#ffffff'
|
|
|
|
[colors.cursor]
|
|
text = '#122637'
|
|
cursor = '#f0cb09'
|
|
|
|
# Normal colors
|
|
[colors.normal]
|
|
red = '#ff0000'
|
|
green = '#37dd21'
|
|
yellow = '#fee409'
|
|
blue = '#1460d2'
|
|
magenta = '#ff005d'
|
|
cyan = '#00bbbb'
|
|
white = '#bbbbbb'
|
|
|
|
# Bright colors
|
|
[colors.bright]
|
|
black = '#545454'
|
|
red = '#f40d17'
|
|
green = '#3bcf1d'
|
|
yellow = '#ecc809'
|
|
blue = '#5555ff'
|
|
magenta = '#ff55ff'
|
|
cyan = '#6ae3f9'
|
|
white = '#ffffff'";
|
|
let config: AlacrittyConfig =
|
|
toml::from_str(cobalt2_config).expect("Should be able to parse toml!");
|
|
let ThemeType::Single(theme) = config
|
|
.colors
|
|
.expect("Should have read colors!")
|
|
.parse()
|
|
.expect("Theme should have read!")
|
|
else {
|
|
panic!("Should not have a dark and light theme for Alacritty!")
|
|
};
|
|
|
|
// Check that the three primary colors are the same.
|
|
assert_eq!(
|
|
theme.accent().into_solid(),
|
|
coloru_from_hex_string("#f0cb09").expect("Should be able to parse a color!")
|
|
);
|
|
assert_eq!(
|
|
theme.background().into_solid(),
|
|
coloru_from_hex_string("#122637").expect("Should be able to parse a color!")
|
|
);
|
|
assert_eq!(
|
|
theme.foreground().into_solid(),
|
|
coloru_from_hex_string("#ffffff").expect("Should be able to parse a color!")
|
|
);
|
|
|
|
// Check some terminal colors.
|
|
assert_eq!(
|
|
theme.terminal_colors().bright.yellow,
|
|
AnsiColor {
|
|
r: 0xec,
|
|
g: 0xc8,
|
|
b: 0x09
|
|
}
|
|
);
|
|
assert_eq!(
|
|
theme.terminal_colors().bright.cyan,
|
|
AnsiColor {
|
|
r: 0x6a,
|
|
g: 0xe3,
|
|
b: 0xf9
|
|
}
|
|
);
|
|
assert_eq!(
|
|
theme.terminal_colors().normal.yellow,
|
|
AnsiColor {
|
|
r: 0xfe,
|
|
g: 0xe4,
|
|
b: 0x09
|
|
}
|
|
);
|
|
assert_eq!(
|
|
theme.terminal_colors().normal.cyan,
|
|
AnsiColor {
|
|
r: 0x00,
|
|
g: 0xbb,
|
|
b: 0xbb
|
|
}
|
|
);
|
|
assert_eq!(
|
|
theme.terminal_colors().normal.black,
|
|
AnsiColor {
|
|
r: 0x18,
|
|
g: 0x18,
|
|
b: 0x18,
|
|
}
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_parse_cobalt2_missing_section() {
|
|
let cobalt2_config = "# From the famous Cobalt2 sublime theme
|
|
# Source https//github.com/wesbos/cobalt2/tree/master/Cobalt2
|
|
|
|
# Default colors
|
|
[colors.primary]
|
|
background = '#122637'
|
|
foreground = '#ffffff'
|
|
|
|
[colors.cursor]
|
|
text = '#122637'
|
|
cursor = '#f0cb09'";
|
|
let config: AlacrittyConfig =
|
|
toml::from_str(cobalt2_config).expect("Should be able to parse toml!");
|
|
let ThemeType::Single(theme) = config
|
|
.colors
|
|
.expect("Should have read colors!")
|
|
.parse()
|
|
.expect("Theme should have read!")
|
|
else {
|
|
panic!("Should not have a dark and light theme for Alacritty!")
|
|
};
|
|
|
|
// Check that the three primary colors are the same.
|
|
assert_eq!(
|
|
theme.accent().into_solid(),
|
|
coloru_from_hex_string("#f0cb09").expect("Should be able to parse a color!")
|
|
);
|
|
assert_eq!(
|
|
theme.background().into_solid(),
|
|
coloru_from_hex_string("#122637").expect("Should be able to parse a color!")
|
|
);
|
|
assert_eq!(
|
|
theme.foreground().into_solid(),
|
|
coloru_from_hex_string("#ffffff").expect("Should be able to parse a color!")
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_parse_cobalt2_bad_terminal_color() {
|
|
let cobalt2_config = "# From the famous Cobalt2 sublime theme
|
|
# Source https//github.com/wesbos/cobalt2/tree/master/Cobalt2
|
|
|
|
# Default colors
|
|
[colors.primary]
|
|
background = '#122637'
|
|
foreground = '#ffffff'
|
|
|
|
[colors.cursor]
|
|
text = '#122637'
|
|
cursor = '#f0cb09'
|
|
|
|
# Normal colors
|
|
[colors.normal]
|
|
red = '#ff000'
|
|
green = '#37dd21'
|
|
yellow = '#fee409'
|
|
blue = '#1460d2'
|
|
magenta = '#ff005d'
|
|
cyan = '#00bbbb'
|
|
white = '#bbbbbb'
|
|
|
|
# Bright colors
|
|
[colors.bright]
|
|
black = '#545454'
|
|
red = '#f40d17'
|
|
green = '#3bcf1d'
|
|
yellow = '#ecc809'
|
|
blue = '#5555ff'
|
|
magenta = '#ff55ff'
|
|
cyan = '#6ae3f9'
|
|
white = '#ffffff'";
|
|
let config: AlacrittyConfig =
|
|
toml::from_str(cobalt2_config).expect("Should be able to parse toml!");
|
|
let _ = config
|
|
.colors
|
|
.expect("Should have read colors!")
|
|
.parse()
|
|
.expect_err("Theme should not have read!");
|
|
}
|
|
|
|
#[test]
|
|
fn test_parse_cobalt2_no_colors() {
|
|
let cobalt2_config = "# From the famous Cobalt2 sublime theme
|
|
# Source https//github.com/wesbos/cobalt2/tree/master/Cobalt2
|
|
|
|
# Default colors
|
|
[colors.primary]
|
|
background = ''
|
|
foreground = ''
|
|
|
|
[colors.cursor]
|
|
text = ''
|
|
cursor = ''";
|
|
let config: AlacrittyConfig =
|
|
toml::from_str(cobalt2_config).expect("Should be able to parse toml!");
|
|
let _ = config
|
|
.colors
|
|
.expect("Should have read colors!")
|
|
.parse()
|
|
.expect_err("Theme should not have read!");
|
|
}
|
|
|
|
#[test]
|
|
fn test_merge_left() {
|
|
let mut colors = AlacrittyTheme {
|
|
primary: Some(PrimaryAlacrittyColors {
|
|
foreground: Some("#ffffff".to_string()),
|
|
background: Some("#000000".to_string()),
|
|
}),
|
|
normal: Some(AlacrittyColors {
|
|
black: Some("#000000".to_string()),
|
|
..Default::default()
|
|
}),
|
|
..Default::default()
|
|
};
|
|
|
|
let second_colors = AlacrittyTheme {
|
|
primary: Some(PrimaryAlacrittyColors {
|
|
foreground: None,
|
|
background: Some("#ff0000".to_string()),
|
|
}),
|
|
normal: Some(AlacrittyColors {
|
|
red: Some("#ff1111".to_string()),
|
|
..Default::default()
|
|
}),
|
|
..Default::default()
|
|
};
|
|
|
|
colors = colors.merge_left(second_colors);
|
|
let primary = colors
|
|
.primary
|
|
.clone()
|
|
.expect("Primary colors should be present");
|
|
let normal = colors
|
|
.normal
|
|
.clone()
|
|
.expect("Normal colors should be present");
|
|
|
|
// Check all four combinations of present and absent in the inner struct.
|
|
assert_eq!(primary.foreground, Some("#ffffff".to_string()));
|
|
assert_eq!(primary.background, Some("#000000".to_string()));
|
|
assert_eq!(normal.black, Some("#000000".to_string()));
|
|
assert_eq!(normal.red, Some("#ff1111".to_string()));
|
|
assert_eq!(normal.white, None);
|
|
|
|
// Check that None values are preserved.
|
|
assert!(colors.bright.is_none());
|
|
}
|
|
|
|
/// This is a unit test that tests reading from the default config location with one import.
|
|
#[test]
|
|
fn test_parse_cobalt2_from_import() {
|
|
VirtualFS::test("test_parse_cobalt2_from_import", |dirs, mut sandbox| {
|
|
sandbox.mkdir("config");
|
|
sandbox.with_files(vec![
|
|
Stub::FileWithContent(
|
|
"config/config.toml",
|
|
format!(
|
|
"
|
|
import = [{:?}]
|
|
",
|
|
dirs.tests().join("config").join("Cobalt2.toml")
|
|
)
|
|
.as_str(),
|
|
),
|
|
Stub::FileWithContent(
|
|
"config/Cobalt2.toml",
|
|
"# From the famous Cobalt2 sublime theme
|
|
# Source https//github.com/wesbos/cobalt2/tree/master/Cobalt2
|
|
|
|
# Default colors
|
|
[colors.primary]
|
|
background = '#122637'
|
|
foreground = '#ffffff'
|
|
|
|
[colors.cursor]
|
|
text = '#122637'
|
|
cursor = '#f0cb09'
|
|
|
|
# Normal colors
|
|
[colors.normal]
|
|
black = '#000000'
|
|
red = '#ff0000'
|
|
green = '#37dd21'
|
|
yellow = '#fee409'
|
|
blue = '#1460d2'
|
|
magenta = '#ff005d'
|
|
cyan = '#00bbbb'
|
|
white = '#bbbbbb'
|
|
|
|
# Bright colors
|
|
[colors.bright]
|
|
black = '#545454'
|
|
red = '#f40d17'
|
|
green = '#3bcf1d'
|
|
yellow = '#ecc809'
|
|
blue = '#5555ff'
|
|
magenta = '#ff55ff'
|
|
cyan = '#6ae3f9'
|
|
white = '#ffffff'",
|
|
),
|
|
]);
|
|
let config: AlacrittyConfig = block_on(AlacrittyConfig::from_file(
|
|
dirs.tests().join("config").join("config.toml"),
|
|
))
|
|
.expect("Should be able to read file!")
|
|
.pop()
|
|
.expect("Should have returned at least one config!");
|
|
let ThemeType::Single(theme) = config
|
|
.colors
|
|
.expect("Should have read colors!")
|
|
.parse()
|
|
.expect("Theme should have read!")
|
|
else {
|
|
panic!("Should not have a dark and light theme for Alacritty!")
|
|
};
|
|
|
|
// Check that the three primary colors are the same.
|
|
assert_eq!(
|
|
theme.accent().into_solid(),
|
|
coloru_from_hex_string("#f0cb09").expect("Should be able to parse a color!")
|
|
);
|
|
assert_eq!(
|
|
theme.background().into_solid(),
|
|
coloru_from_hex_string("#122637").expect("Should be able to parse a color!")
|
|
);
|
|
assert_eq!(
|
|
theme.foreground().into_solid(),
|
|
coloru_from_hex_string("#ffffff").expect("Should be able to parse a color!")
|
|
);
|
|
|
|
// Check some terminal colors.
|
|
assert_eq!(
|
|
theme.terminal_colors().bright.yellow,
|
|
AnsiColor {
|
|
r: 0xec,
|
|
g: 0xc8,
|
|
b: 0x09
|
|
}
|
|
);
|
|
assert_eq!(
|
|
theme.terminal_colors().bright.cyan,
|
|
AnsiColor {
|
|
r: 0x6a,
|
|
g: 0xe3,
|
|
b: 0xf9
|
|
}
|
|
);
|
|
assert_eq!(
|
|
theme.terminal_colors().normal.yellow,
|
|
AnsiColor {
|
|
r: 0xfe,
|
|
g: 0xe4,
|
|
b: 0x09
|
|
}
|
|
);
|
|
assert_eq!(
|
|
theme.terminal_colors().normal.cyan,
|
|
AnsiColor {
|
|
r: 0x00,
|
|
g: 0xbb,
|
|
b: 0xbb
|
|
}
|
|
);
|
|
});
|
|
}
|