Initial commit
This commit is contained in:
commit
6d8b63618b
26 changed files with 4424 additions and 0 deletions
44
test/expander_theme_data_test.dart
Normal file
44
test/expander_theme_data_test.dart
Normal file
|
@ -0,0 +1,44 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_treeview/src/expander_theme_data.dart';
|
||||
|
||||
void main() {
|
||||
test('fallback', () {
|
||||
final ExpanderThemeData theme = ExpanderThemeData.fallback();
|
||||
expect(theme.type, ExpanderType.caret);
|
||||
expect(theme.position, ExpanderPosition.start);
|
||||
expect(theme.size, 30);
|
||||
expect(theme.color, Color(0xFF000000));
|
||||
});
|
||||
test('copyWith', () {
|
||||
ExpanderThemeData theme = ExpanderThemeData.fallback();
|
||||
theme = theme.copyWith(
|
||||
type: ExpanderType.arrow,
|
||||
position: ExpanderPosition.end,
|
||||
size: 20,
|
||||
color: Color(0xFF990000),
|
||||
);
|
||||
expect(theme.type, ExpanderType.arrow);
|
||||
expect(theme.position, ExpanderPosition.end);
|
||||
expect(theme.size, 20);
|
||||
expect(theme.color, Color(0xFF990000));
|
||||
});
|
||||
test('merge', () {
|
||||
ExpanderThemeData theme = ExpanderThemeData.fallback();
|
||||
ExpanderThemeData theme2 = ExpanderThemeData(
|
||||
type: ExpanderType.arrow,
|
||||
position: ExpanderPosition.end,
|
||||
modifier: ExpanderModifier.circleFilled,
|
||||
size: 20,
|
||||
animated: false,
|
||||
color: Color(0xFF990000),
|
||||
);
|
||||
theme = theme.merge(theme2);
|
||||
expect(theme.type, ExpanderType.arrow);
|
||||
expect(theme.position, ExpanderPosition.end);
|
||||
expect(theme.modifier, ExpanderModifier.circleFilled);
|
||||
expect(theme.size, 20);
|
||||
expect(theme.color, Color(0xFF990000));
|
||||
expect(theme, theme2);
|
||||
});
|
||||
}
|
132
test/node_test.dart
Normal file
132
test/node_test.dart
Normal file
|
@ -0,0 +1,132 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_treeview/src/models/node.dart';
|
||||
|
||||
class Person {
|
||||
final int age;
|
||||
|
||||
Person({required this.age});
|
||||
}
|
||||
|
||||
class Animal {
|
||||
final int legs;
|
||||
|
||||
Animal({required this.legs});
|
||||
}
|
||||
|
||||
void main() {
|
||||
group('instantiate', () {
|
||||
test('from string', () {
|
||||
final Node node = Node.fromLabel('Home');
|
||||
expect(node.key.isNotEmpty, true);
|
||||
expect(node.label, 'Home');
|
||||
expect(node.icon, null);
|
||||
expect(node.expanded, false);
|
||||
expect(node.children.length, 0);
|
||||
});
|
||||
test('copyWith', () {
|
||||
final Node node = Node.fromLabel('Home');
|
||||
expect(node.label, 'Home');
|
||||
expect(node.icon, null);
|
||||
expect(node.expanded, false);
|
||||
expect(node.children.length, 0);
|
||||
final Node newNode = node.copyWith(label: 'New Home');
|
||||
expect(newNode.label, 'New Home');
|
||||
expect(newNode.icon, null);
|
||||
expect(newNode.expanded, false);
|
||||
expect(newNode.children.length, 0);
|
||||
});
|
||||
test('from map', () {
|
||||
final map = {
|
||||
"key": "12345",
|
||||
"label": "Home",
|
||||
};
|
||||
final expectedMap = {
|
||||
"key": "12345",
|
||||
"label": "Home",
|
||||
"icon": null,
|
||||
"expanded": false,
|
||||
"parent": false,
|
||||
"children": [],
|
||||
};
|
||||
final Node node = Node.fromMap(map);
|
||||
expect(node.key, '12345');
|
||||
expect(node.label, 'Home');
|
||||
expect(node.icon, null);
|
||||
expect(node.expanded, false);
|
||||
expect(node.children.length, 0);
|
||||
expect(node.isParent, false);
|
||||
expect(node.asMap, expectedMap);
|
||||
});
|
||||
test('from nested map', () {
|
||||
final map = {
|
||||
"label": "Home",
|
||||
"expanded": 1,
|
||||
"icon": Icons.home.codePoint.toString(),
|
||||
"children": [
|
||||
{
|
||||
"key": "12345b",
|
||||
"label": "Basement",
|
||||
},
|
||||
{
|
||||
"key": "12345k",
|
||||
"label": "Kitchen",
|
||||
}
|
||||
],
|
||||
};
|
||||
final expectedMap = {
|
||||
"label": "Home",
|
||||
"icon": null,
|
||||
"expanded": true,
|
||||
"parent": false,
|
||||
"children": [
|
||||
{
|
||||
"key": "12345b",
|
||||
"label": "Basement",
|
||||
"icon": null,
|
||||
"expanded": false,
|
||||
"parent": false,
|
||||
"children": [],
|
||||
},
|
||||
{
|
||||
"key": "12345k",
|
||||
"label": "Kitchen",
|
||||
"icon": null,
|
||||
"expanded": false,
|
||||
"parent": false,
|
||||
"children": [],
|
||||
}
|
||||
],
|
||||
};
|
||||
final Node node = Node.fromMap(map);
|
||||
expect(node.key.isNotEmpty, true);
|
||||
expect(node.label, 'Home');
|
||||
expect(node.icon, null);
|
||||
expect(node.expanded, true);
|
||||
expect(node.children.length, 2);
|
||||
expect(node.isParent, true);
|
||||
Map nodeMap = node.asMap;
|
||||
nodeMap.remove('key');
|
||||
expect(nodeMap, expectedMap);
|
||||
});
|
||||
test('with data', () {
|
||||
Person lukas = Person(age: 3);
|
||||
Animal otis = Animal(legs: 4);
|
||||
final Node node1 =
|
||||
Node<Person>(label: 'Lukas', key: 'lukas', data: lukas);
|
||||
Node node2 = Node.fromLabel('Friend');
|
||||
expect(node1.hasData, true);
|
||||
expect(node1.data.runtimeType, Person);
|
||||
|
||||
expect(node2.hasData, false);
|
||||
expect(node2.data.runtimeType, Null);
|
||||
node2 = node2.copyWith(data: otis);
|
||||
expect(node2.data.runtimeType, Animal);
|
||||
expect(node2.hasData, true);
|
||||
final Node node3 =
|
||||
Node<double>(label: 'Building Height', key: 'bldghgt', data: 100.4);
|
||||
expect(node3.hasData, true);
|
||||
expect(node3.data.runtimeType, double);
|
||||
});
|
||||
});
|
||||
}
|
95
test/tree_view_controller_test.dart
Normal file
95
test/tree_view_controller_test.dart
Normal file
|
@ -0,0 +1,95 @@
|
|||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_treeview/src/models/node.dart';
|
||||
import 'package:flutter_treeview/src/tree_view_controller.dart';
|
||||
|
||||
void main() {
|
||||
List<Node> nodes = [
|
||||
Node(label: 'documents', key: 'docs', children: [
|
||||
Node(label: 'personal', key: 'd3', children: [
|
||||
Node(label: 'Resume.docx', key: 'pd1'),
|
||||
Node(label: 'Cover Letter.docx', key: 'pd2'),
|
||||
]),
|
||||
Node(label: 'Inspection.docx', key: 'd1'),
|
||||
Node(label: 'Invoice.docx', key: 'd2'),
|
||||
]),
|
||||
Node(
|
||||
label: 'MeetingReport.xls',
|
||||
key: 'mrxls',
|
||||
),
|
||||
Node(
|
||||
label: 'MeetingReport.pdf',
|
||||
key: 'mrpdf',
|
||||
),
|
||||
Node(
|
||||
label: 'Demo.zip',
|
||||
key: 'demo',
|
||||
),
|
||||
];
|
||||
group('TreeViewController Tests', () {
|
||||
test('...get node', () {
|
||||
TreeViewController controller = TreeViewController(children: nodes);
|
||||
Node? validNode = controller.getNode('pd1');
|
||||
Node? invalidNode = controller.getNode('xpd1');
|
||||
expect(controller.children.length, 4);
|
||||
expect(validNode.runtimeType, Node);
|
||||
expect(validNode!.label, 'Resume.docx');
|
||||
expect(invalidNode.runtimeType, Null);
|
||||
});
|
||||
test('...get parent', () {
|
||||
TreeViewController controller = TreeViewController(children: nodes);
|
||||
Node? nodeParent = controller.getParent('pd1');
|
||||
Node? rootParent = controller.getParent('docs');
|
||||
Node? noParent = controller.getParent('xpd1');
|
||||
expect(nodeParent.runtimeType, Node);
|
||||
expect(nodeParent!.key, 'd3');
|
||||
expect(rootParent.runtimeType, Node);
|
||||
expect(rootParent!.key, 'docs');
|
||||
expect(noParent.runtimeType, Null);
|
||||
});
|
||||
test('...update node', () {
|
||||
TreeViewController controller = TreeViewController(children: nodes);
|
||||
Node? node = controller.getNode('pd1');
|
||||
Node updatedNode = node!.copyWith(
|
||||
key: 'pdf1',
|
||||
label: 'My Resume.pdf',
|
||||
);
|
||||
List<Node> newChildren = controller.updateNode(node.key, updatedNode);
|
||||
controller = TreeViewController(children: newChildren);
|
||||
Node? validNode = controller.getNode('pdf1');
|
||||
Node? invalidNode = controller.getNode('pd1');
|
||||
expect(validNode.runtimeType, Node);
|
||||
expect(validNode!.key, updatedNode.key);
|
||||
expect(validNode.label, updatedNode.label);
|
||||
expect(invalidNode.runtimeType, Null);
|
||||
});
|
||||
test('...delete child node', () {
|
||||
TreeViewController controller = TreeViewController(children: nodes);
|
||||
List<Node> newChildren = controller.deleteNode('pd1');
|
||||
controller = TreeViewController(children: newChildren);
|
||||
Node? invalidNode = controller.getNode('pd1');
|
||||
expect(invalidNode.runtimeType, Null);
|
||||
});
|
||||
test('...delete parent node', () {
|
||||
TreeViewController controller = TreeViewController(children: nodes);
|
||||
List<Node> newChildren = controller.deleteNode('docs');
|
||||
controller = TreeViewController(children: newChildren);
|
||||
expect(controller.getNode('docs'), null);
|
||||
expect(controller.getNode('pd1'), null);
|
||||
expect(controller.getNode('pd2'), null);
|
||||
expect(controller.getNode('d3'), null);
|
||||
expect(controller.getNode('d1'), null);
|
||||
expect(controller.getNode('d2'), null);
|
||||
});
|
||||
test('...add child node', () {
|
||||
TreeViewController controller = TreeViewController(children: nodes);
|
||||
Node? invalidNode = controller.getNode('pd3');
|
||||
expect(invalidNode.runtimeType, Null);
|
||||
Node newNode = Node(label: 'References.docx', key: 'pd3');
|
||||
List<Node> newChildren = controller.addNode('d3', newNode);
|
||||
controller = TreeViewController(children: newChildren);
|
||||
Node? validNode = controller.getNode('pd3');
|
||||
expect(validNode.runtimeType, Node);
|
||||
expect(validNode!.label, newNode.label);
|
||||
});
|
||||
});
|
||||
}
|
51
test/tree_view_theme_test.dart
Normal file
51
test/tree_view_theme_test.dart
Normal file
|
@ -0,0 +1,51 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_treeview/src/expander_theme_data.dart';
|
||||
import 'package:flutter_treeview/src/tree_view_theme.dart';
|
||||
|
||||
void main() {
|
||||
test('fallback', () {
|
||||
final TreeViewTheme theme = TreeViewTheme.fallback();
|
||||
expect(theme.colorScheme, ColorScheme.light());
|
||||
expect(theme.levelPadding, 20);
|
||||
expect(theme.iconTheme.isConcrete, true);
|
||||
expect(theme.labelStyle, TextStyle());
|
||||
});
|
||||
test('copyWith', () {
|
||||
TreeViewTheme theme = TreeViewTheme.fallback();
|
||||
theme = theme.copyWith(
|
||||
colorScheme: ColorScheme.dark(),
|
||||
levelPadding: 25,
|
||||
iconTheme: IconThemeData(),
|
||||
expanderTheme: ExpanderThemeData(),
|
||||
labelStyle: TextStyle(fontSize: 35),
|
||||
);
|
||||
expect(theme.colorScheme, ColorScheme.dark());
|
||||
expect(theme.levelPadding, 25);
|
||||
expect(theme.iconTheme.isConcrete, false);
|
||||
// expect(theme.expanderTheme.isConcrete, true);
|
||||
expect(theme.labelStyle.fontSize, 35);
|
||||
});
|
||||
test('merge', () {
|
||||
TreeViewTheme theme = TreeViewTheme.fallback();
|
||||
TreeViewTheme theme2 = TreeViewTheme(
|
||||
colorScheme: ColorScheme.dark(),
|
||||
levelPadding: 25,
|
||||
iconTheme: IconThemeData(),
|
||||
expanderTheme: ExpanderThemeData(),
|
||||
labelStyle: TextStyle(fontSize: 35),
|
||||
);
|
||||
theme = theme.merge(theme2);
|
||||
expect(theme.colorScheme, ColorScheme.dark());
|
||||
expect(theme.levelPadding, 25);
|
||||
expect(theme.iconTheme.isConcrete, false);
|
||||
// expect(theme.expanderTheme.isConcrete, true);
|
||||
expect(theme.labelStyle.fontSize, 35);
|
||||
expect(theme, theme2);
|
||||
});
|
||||
test('isConcrete', () {
|
||||
TreeViewTheme theme = TreeViewTheme.fallback();
|
||||
TreeViewTheme theme2 = TreeViewTheme();
|
||||
expect(theme == theme2, true);
|
||||
});
|
||||
}
|
1152
test/utilities_color_test.dart
Normal file
1152
test/utilities_color_test.dart
Normal file
File diff suppressed because it is too large
Load diff
44
test/utilities_test.dart
Normal file
44
test/utilities_test.dart
Normal file
|
@ -0,0 +1,44 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_treeview/src/utilities.dart';
|
||||
|
||||
void main() {
|
||||
group('random generator', () {
|
||||
test('generates at least 300 unique strings', () {
|
||||
List<String> _keys = [];
|
||||
final int count = 300;
|
||||
for (int i = 0; i < count; i++) {
|
||||
_keys.add(Utilities.generateRandom());
|
||||
}
|
||||
expect(_keys.length, count);
|
||||
expect(_keys, _keys.toSet().toList());
|
||||
});
|
||||
test('generates at least 200 unique 10 character strings', () {
|
||||
List<String> _keys = [];
|
||||
final int count = 200;
|
||||
for (int i = 0; i < count; i++) {
|
||||
_keys.add(Utilities.generateRandom(10));
|
||||
}
|
||||
expect(_keys.first.length, 10);
|
||||
expect(_keys.length, count);
|
||||
expect(_keys, _keys.toSet().toList());
|
||||
});
|
||||
});
|
||||
group('truthful', () {
|
||||
test('is true', () {
|
||||
expect(Utilities.truthful(true), true);
|
||||
expect(Utilities.truthful('true'), true);
|
||||
expect(Utilities.truthful(1), true);
|
||||
expect(Utilities.truthful('1'), true);
|
||||
expect(Utilities.truthful('yes'), true);
|
||||
});
|
||||
test('is false', () {
|
||||
expect(Utilities.truthful(false), false);
|
||||
expect(Utilities.truthful('false'), false);
|
||||
expect(Utilities.truthful(0), false);
|
||||
expect(Utilities.truthful('0'), false);
|
||||
expect(Utilities.truthful('no'), false);
|
||||
expect(Utilities.truthful('someothervalue'), false);
|
||||
});
|
||||
});
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue