|
|
@@ -1,28 +1,26 @@
|
|
|
use users::{Users, Groups};
|
|
|
|
|
|
use fs::fields as f;
|
|
|
+use output::colours::Colours;
|
|
|
use output::cell::TextCell;
|
|
|
-use output::details::Table;
|
|
|
|
|
|
|
|
|
-impl<'a, U: Users+Groups+'a> Table<'a, U> {
|
|
|
-
|
|
|
- pub fn render_group(&self, group: f::Group) -> TextCell {
|
|
|
+impl f::Group {
|
|
|
+ pub fn render<U: Users+Groups>(&self, colours: &Colours, users: &U) -> TextCell {
|
|
|
use users::os::unix::GroupExt;
|
|
|
|
|
|
- let mut style = self.opts.colours.users.group_not_yours;
|
|
|
+ let mut style = colours.users.group_not_yours;
|
|
|
|
|
|
- let users = self.env.users();
|
|
|
- let group = match users.get_group_by_gid(group.0) {
|
|
|
+ let group = match users.get_group_by_gid(self.0) {
|
|
|
Some(g) => (*g).clone(),
|
|
|
- None => return TextCell::paint(style, group.0.to_string()),
|
|
|
+ None => return TextCell::paint(style, self.0.to_string()),
|
|
|
};
|
|
|
|
|
|
let current_uid = users.get_current_uid();
|
|
|
if let Some(current_user) = users.get_user_by_uid(current_uid) {
|
|
|
if current_user.primary_group_id() == group.gid()
|
|
|
|| group.members().contains(¤t_user.name().to_owned()) {
|
|
|
- style = self.opts.colours.users.group_yours;
|
|
|
+ style = colours.users.group_yours;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -35,51 +33,43 @@ impl<'a, U: Users+Groups+'a> Table<'a, U> {
|
|
|
#[allow(unused_results)]
|
|
|
pub mod test {
|
|
|
use output::details::Details;
|
|
|
- use output::details::test::new_table;
|
|
|
|
|
|
use fs::fields as f;
|
|
|
- use output::column::Columns;
|
|
|
use output::cell::TextCell;
|
|
|
|
|
|
use users::{User, Group};
|
|
|
use users::mock::MockUsers;
|
|
|
use users::os::unix::GroupExt;
|
|
|
- use ansi_term::Style;
|
|
|
use ansi_term::Colour::*;
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
fn named() {
|
|
|
- let columns = Columns::default().for_dir(None);
|
|
|
let mut details = Details::default();
|
|
|
details.colours.users.group_not_yours = Fixed(101).normal();
|
|
|
|
|
|
let mut users = MockUsers::with_current_uid(1000);
|
|
|
users.add_group(Group::new(100, "folk"));
|
|
|
- let table = new_table(&columns, &details, users);
|
|
|
|
|
|
let group = f::Group(100);
|
|
|
let expected = TextCell::paint_str(Fixed(101).normal(), "folk");
|
|
|
- assert_eq!(expected, table.render_group(group))
|
|
|
+ assert_eq!(expected, group.render(&details.colours, &users))
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn unnamed() {
|
|
|
- let columns = Columns::default().for_dir(None);
|
|
|
let mut details = Details::default();
|
|
|
details.colours.users.group_not_yours = Fixed(87).normal();
|
|
|
|
|
|
let users = MockUsers::with_current_uid(1000);
|
|
|
- let table = new_table(&columns, &details, users);
|
|
|
|
|
|
let group = f::Group(100);
|
|
|
let expected = TextCell::paint_str(Fixed(87).normal(), "100");
|
|
|
- assert_eq!(expected, table.render_group(group));
|
|
|
+ assert_eq!(expected, group.render(&details.colours, &users));
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn primary() {
|
|
|
- let columns = Columns::default().for_dir(None);
|
|
|
let mut details = Details::default();
|
|
|
details.colours.users.group_yours = Fixed(64).normal();
|
|
|
|
|
|
@@ -87,16 +77,13 @@ pub mod test {
|
|
|
users.add_user(User::new(2, "eve", 100));
|
|
|
users.add_group(Group::new(100, "folk"));
|
|
|
|
|
|
- let table = new_table(&columns, &details, users);
|
|
|
-
|
|
|
let group = f::Group(100);
|
|
|
let expected = TextCell::paint_str(Fixed(64).normal(), "folk");
|
|
|
- assert_eq!(expected, table.render_group(group))
|
|
|
+ assert_eq!(expected, group.render(&details.colours, &users))
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn secondary() {
|
|
|
- let columns = Columns::default().for_dir(None);
|
|
|
let mut details = Details::default();
|
|
|
details.colours.users.group_yours = Fixed(31).normal();
|
|
|
|
|
|
@@ -106,23 +93,18 @@ pub mod test {
|
|
|
let test_group = Group::new(100, "folk").add_member("eve");
|
|
|
users.add_group(test_group);
|
|
|
|
|
|
- let table = new_table(&columns, &details, users);
|
|
|
-
|
|
|
let group = f::Group(100);
|
|
|
let expected = TextCell::paint_str(Fixed(31).normal(), "folk");
|
|
|
- assert_eq!(expected, table.render_group(group))
|
|
|
+ assert_eq!(expected, group.render(&details.colours, &users))
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn overflow() {
|
|
|
- let columns = Columns::default().for_dir(None);
|
|
|
let mut details = Details::default();
|
|
|
details.colours.users.group_not_yours = Blue.underline();
|
|
|
|
|
|
- let table = new_table(&columns, &details, MockUsers::with_current_uid(0));
|
|
|
-
|
|
|
let group = f::Group(2_147_483_648);
|
|
|
let expected = TextCell::paint_str(Blue.underline(), "2147483648");
|
|
|
- assert_eq!(expected, table.render_group(group));
|
|
|
+ assert_eq!(expected, group.render(&details.colours, &MockUsers::with_current_uid(0)));
|
|
|
}
|
|
|
}
|