import 'package:dart_di/di_container.dart'; import 'package:dart_di/resolvers/resolver.dart'; import 'package:test/test.dart'; import 'package:mockito/mockito.dart'; void main() { group('Without parent', () { test('Container bind throws state error if it\'s already has resolver', () { final container = new DiContainer(); container.bind().toResolver(_makeResolver(5)); expect(() => container.bind().toResolver(_makeResolver(3)), throwsA(isA())); }); test("Container resolves value after adding a dependency", () { final expectedValue = 3; final container = new DiContainer(); container.bind().toResolver(_makeResolver(expectedValue)); expect(container.resolve(), expectedValue); }); test("Container throws state error if the value can't be resolved", () { final container = DiContainer(); expect(() => container.resolve(), throwsA(isA())); }); test("Container has() returns true if it has resolver", () { final expectedValue = 5; final container = new DiContainer(); container.bind().toResolver(_makeResolver(expectedValue)); expect(container.has(), true); }); test("Container has() returns false if it hasn't resolver", () { final container = new DiContainer(); expect(container.has(), false); }); test("Container hasInTree() returns true if it has resolver", () { final expectedValue = 5; final container = DiContainer(); container.bind().toResolver(_makeResolver(expectedValue)); expect(container.hasInTree(), true); }); test("Container hasInTree() returns true if it hasn`t resolver", () { final container = DiContainer(); expect(container.hasInTree(), false); }); }); } ResolverMock _makeResolver(T expectedValue) { final resolverMock = new ResolverMock(); when(resolverMock.resolve()).thenReturn(expectedValue); return resolverMock; } class ResolverMock extends Mock implements Resolver {} abstract class A {} class B implements A {} class DependOnA { final A a; DependOnA(this.a) : assert(a != null); }