Initial commit

This commit is contained in:
luckyrat 2021-07-07 10:14:27 +01:00
commit 6d8b63618b
26 changed files with 4424 additions and 0 deletions

View 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
View 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);
});
});
}

View 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);
});
});
}

View 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);
});
}

File diff suppressed because it is too large Load diff

44
test/utilities_test.dart Normal file
View 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);
});
});
}