Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
3055ae4e
Unverified
Commit
3055ae4e
authored
Sep 10, 2020
by
Greg Spencer
Committed by
GitHub
Sep 10, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Eliminate the need for the mockito package in animated_icons_private_test (#65199)
parent
13860a7d
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
137 additions
and
63 deletions
+137
-63
animated_icons.dart
packages/flutter/lib/src/material/animated_icons.dart
+2
-1
animated_icons.dart
...utter/lib/src/material/animated_icons/animated_icons.dart
+11
-11
animated_icons_private_test.dart
...es/flutter/test/material/animated_icons_private_test.dart
+124
-51
No files found.
packages/flutter/lib/src/material/animated_icons.dart
View file @
3055ae4e
...
...
@@ -18,11 +18,12 @@ import 'package:flutter/widgets.dart';
// Public API.
part
'animated_icons/animated_icons.dart'
;
// Provides a public interface for referring to the private icon
// implementations.
part
'animated_icons/animated_icons_data.dart'
;
//
Animated icons
data files.
//
Generated animated icon
data files.
part
'animated_icons/data/add_event.g.dart'
;
part
'animated_icons/data/arrow_menu.g.dart'
;
part
'animated_icons/data/close_menu.g.dart'
;
...
...
packages/flutter/lib/src/material/animated_icons/animated_icons.dart
View file @
3055ae4e
...
...
@@ -279,17 +279,17 @@ class _PathClose extends _PathCommand {
}
}
// Interpolates a value given a set of values equally spaced in time.
//
// [interpolator] is the interpolation function used to interpolate between 2
// points of type T.
//
// This is currently done with linear interpolation between every 2 consecutive
// points. Linear interpolation was smooth enough with the limited set of
// animations we have tested, so we use it for simplicity. If we find this to
// not be smooth enough we can try applying spline instead.
//
// [progress] is expected to be between 0.0 and 1.0.
//
/
Interpolates a value given a set of values equally spaced in time.
//
/
//
/
[interpolator] is the interpolation function used to interpolate between 2
//
/
points of type T.
//
/
//
/
This is currently done with linear interpolation between every 2 consecutive
//
/
points. Linear interpolation was smooth enough with the limited set of
//
/
animations we have tested, so we use it for simplicity. If we find this to
//
/
not be smooth enough we can try applying spline instead.
//
/
//
/
[progress] is expected to be between 0.0 and 1.0.
T
_interpolate
<
T
>(
List
<
T
>
values
,
double
progress
,
_Interpolator
<
T
>
interpolator
)
{
assert
(
progress
<=
1.0
);
assert
(
progress
>=
0.0
);
...
...
packages/flutter/test/material/animated_icons_private_test.dart
View file @
3055ae4e
...
...
@@ -18,7 +18,6 @@ import 'dart:ui' as ui show Paint, Path, Canvas;
import
'package:flutter/animation.dart'
;
import
'package:flutter/widgets.dart'
;
import
'package:meta/meta.dart'
;
import
'package:mockito/mockito.dart'
;
import
'../flutter_test_alternative.dart'
;
...
...
@@ -83,16 +82,19 @@ void main () {
group
(
'_AnimatedIconPainter'
,
()
{
const
Size
size
=
Size
(
48.0
,
48.0
);
final
MockCanvas
mockCanvas
=
MockCanvas
();
MockPath
mockPath
;
MockCanvas
mockCanvas
;
List
<
MockPath
>
generatedPaths
;
final
_UiPathFactory
pathFactory
=
()
{
final
MockPath
path
=
MockPath
();
generatedPaths
.
add
(
path
);
return
path
;
};
_UiPathFactory
pathFactory
;
setUp
(()
{
generatedPaths
=
<
MockPath
>
[];
generatedPaths
=
<
MockPath
>[];
mockCanvas
=
MockCanvas
();
mockPath
=
MockPath
();
pathFactory
=
()
{
generatedPaths
.
add
(
mockPath
);
return
mockPath
;
};
});
test
(
'progress 0'
,
()
{
...
...
@@ -107,13 +109,13 @@ void main () {
painter
.
paint
(
mockCanvas
,
size
);
expect
(
generatedPaths
.
length
,
1
);
verifyInOrder
(<
void
>[
generatedPaths
[
0
].
moveTo
(
0.0
,
0.0
),
generatedPaths
[
0
].
lineTo
(
48.0
,
0.0
),
generatedPaths
[
0
].
lineTo
(
48.0
,
10.0
),
generatedPaths
[
0
].
lineTo
(
0.0
,
10.0
),
generatedPaths
[
0
].
lineTo
(
0.0
,
0.0
),
generatedPaths
[
0
].
close
(
),
generatedPaths
[
0
].
verifyCallsInOrder
(<
MockCall
>[
MockCall
(
'moveTo'
,
<
dynamic
>[
0.0
,
0.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
48.0
,
0.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
48.0
,
10.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
0.0
,
10.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
0.0
,
0.0
]
),
MockCall
(
'close'
),
]);
});
...
...
@@ -129,13 +131,13 @@ void main () {
painter
.
paint
(
mockCanvas
,
size
);
expect
(
generatedPaths
.
length
,
1
);
verifyInOrder
(<
void
>[
generatedPaths
[
0
].
moveTo
(
0.0
,
38.0
),
generatedPaths
[
0
].
lineTo
(
48.0
,
38.0
),
generatedPaths
[
0
].
lineTo
(
48.0
,
48.0
),
generatedPaths
[
0
].
lineTo
(
0.0
,
48.0
),
generatedPaths
[
0
].
lineTo
(
0.0
,
38.0
),
generatedPaths
[
0
].
close
(
),
generatedPaths
[
0
].
verifyCallsInOrder
(<
MockCall
>[
MockCall
(
'moveTo'
,
<
dynamic
>[
0.0
,
38.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
48.0
,
38.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
48.0
,
48.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
0.0
,
48.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
0.0
,
38.0
]
),
MockCall
(
'close'
),
]);
});
...
...
@@ -151,13 +153,13 @@ void main () {
painter
.
paint
(
mockCanvas
,
size
);
expect
(
generatedPaths
.
length
,
1
);
verifyInOrder
(<
void
>[
generatedPaths
[
0
].
moveTo
(
0.0
,
38.0
),
generatedPaths
[
0
].
lineTo
(
48.0
,
38.0
),
generatedPaths
[
0
].
lineTo
(
48.0
,
48.0
),
generatedPaths
[
0
].
lineTo
(
0.0
,
48.0
),
generatedPaths
[
0
].
lineTo
(
0.0
,
38.0
),
generatedPaths
[
0
].
close
(
),
generatedPaths
[
0
].
verifyCallsInOrder
(<
MockCall
>[
MockCall
(
'moveTo'
,
<
dynamic
>[
0.0
,
38.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
48.0
,
38.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
48.0
,
48.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
0.0
,
48.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
0.0
,
38.0
]
),
MockCall
(
'close'
),
]);
});
...
...
@@ -171,7 +173,10 @@ void main () {
uiPathFactory:
pathFactory
,
);
painter
.
paint
(
mockCanvas
,
size
);
verify
(
mockCanvas
.
scale
(
0.5
,
0.5
));
mockCanvas
.
verifyCallsInOrder
(<
MockCall
>[
MockCall
(
'scale'
,
<
dynamic
>[
0.5
,
0.5
]),
MockCall
.
any
(
'drawPath'
),
]);
});
test
(
'mirror'
,
()
{
...
...
@@ -184,9 +189,11 @@ void main () {
uiPathFactory:
pathFactory
,
);
painter
.
paint
(
mockCanvas
,
size
);
verifyInOrder
(<
void
>[
mockCanvas
.
rotate
(
math
.
pi
),
mockCanvas
.
translate
(-
48.0
,
-
48.0
),
mockCanvas
.
verifyCallsInOrder
(<
MockCall
>[
MockCall
(
'scale'
,
<
dynamic
>[
1.0
,
1.0
]),
MockCall
(
'rotate'
,
<
dynamic
>[
math
.
pi
]),
MockCall
(
'translate'
,
<
dynamic
>[-
48.0
,
-
48.0
]),
MockCall
.
any
(
'drawPath'
),
]);
});
...
...
@@ -202,13 +209,13 @@ void main () {
painter
.
paint
(
mockCanvas
,
size
);
expect
(
generatedPaths
.
length
,
1
);
verifyInOrder
(<
void
>[
generatedPaths
[
0
].
moveTo
(
0.0
,
19.0
),
generatedPaths
[
0
].
lineTo
(
48.0
,
19.0
),
generatedPaths
[
0
].
lineTo
(
48.0
,
29.0
),
generatedPaths
[
0
].
lineTo
(
0.0
,
29.0
),
generatedPaths
[
0
].
lineTo
(
0.0
,
19.0
),
generatedPaths
[
0
].
close
(
),
generatedPaths
[
0
].
verifyCallsInOrder
(<
MockCall
>[
MockCall
(
'moveTo'
,
<
dynamic
>[
0.0
,
19.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
48.0
,
19.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
48.0
,
29.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
0.0
,
29.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
0.0
,
19.0
]
),
MockCall
(
'close'
),
]);
});
...
...
@@ -224,11 +231,11 @@ void main () {
painter
.
paint
(
mockCanvas
,
size
);
expect
(
generatedPaths
.
length
,
1
);
verifyInOrder
(<
void
>[
generatedPaths
[
0
].
moveTo
(
0.0
,
24.0
),
generatedPaths
[
0
].
cubicTo
(
16.0
,
48.0
,
32.0
,
48.0
,
48.0
,
24.0
),
generatedPaths
[
0
].
lineTo
(
0.0
,
24.0
),
generatedPaths
[
0
].
close
(
),
generatedPaths
[
0
].
verifyCallsInOrder
(<
MockCall
>[
MockCall
(
'moveTo'
,
<
dynamic
>[
0.0
,
24.0
]
),
MockCall
(
'cubicTo'
,
<
dynamic
>[
16.0
,
48.0
,
32.0
,
48.0
,
48.0
,
24.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
0.0
,
24.0
]
),
MockCall
(
'close'
),
]);
});
...
...
@@ -244,11 +251,11 @@ void main () {
painter
.
paint
(
mockCanvas
,
size
);
expect
(
generatedPaths
.
length
,
1
);
verifyInOrder
(<
void
>[
generatedPaths
[
0
].
moveTo
(
0.0
,
24.0
),
generatedPaths
[
0
].
cubicTo
(
16.0
,
17.0
,
32.0
,
17.0
,
48.0
,
24.0
),
generatedPaths
[
0
].
lineTo
(
0.0
,
24.0
),
generatedPaths
[
0
].
close
(
),
generatedPaths
[
0
].
verifyCallsInOrder
(<
MockCall
>[
MockCall
(
'moveTo'
,
<
dynamic
>[
0.0
,
24.0
]
),
MockCall
(
'cubicTo'
,
<
dynamic
>[
16.0
,
17.0
,
32.0
,
17.0
,
48.0
,
24.0
]
),
MockCall
(
'lineTo'
,
<
dynamic
>[
0.0
,
24.0
]
),
MockCall
(
'close'
,
<
dynamic
>[]
),
]);
});
...
...
@@ -339,10 +346,76 @@ void main () {
expect
(
painter1
.
shouldRepaint
(
painter2
),
true
);
});
});
}
// Contains the data from an invocation used for collection of calls and for
// expectations in Mock class.
class
MockCall
{
// Creates a mock call with optional positional arguments.
MockCall
(
String
memberName
,
[
this
.
positionalArguments
,
this
.
acceptAny
=
false
])
:
memberSymbol
=
Symbol
(
memberName
);
MockCall
.
fromSymbol
(
this
.
memberSymbol
,
[
this
.
positionalArguments
,
this
.
acceptAny
=
false
]);
// Creates a mock call expectation that doesn't care about what the arguments were.
MockCall
.
any
(
String
memberName
)
:
memberSymbol
=
Symbol
(
memberName
),
acceptAny
=
true
,
positionalArguments
=
null
;
final
Symbol
memberSymbol
;
String
get
memberName
{
final
RegExp
symbolMatch
=
RegExp
(
r'Symbol\("(?<name>.*)"\)'
);
final
RegExpMatch
match
=
symbolMatch
.
firstMatch
(
memberSymbol
.
toString
());
assert
(
match
!=
null
);
return
match
.
namedGroup
(
'name'
);
}
final
List
<
dynamic
>
positionalArguments
;
final
bool
acceptAny
;
@override
String
toString
()
{
return
'
$memberName
(
${positionalArguments?.join(', ') ?? ''}
)'
;
}
}
// A very simplified version of a Mock class.
//
// Only verifies positional arguments, and only can verify calls in order.
class
Mock
{
final
List
<
MockCall
>
_calls
=
<
MockCall
>[];
// Verify that the given calls happened in the order given.
void
verifyCallsInOrder
(
List
<
MockCall
>
expected
)
{
int
count
=
0
;
expect
(
expected
.
length
,
equals
(
_calls
.
length
),
reason:
'Incorrect number of calls received. '
'Expected
${expected.length}
and received
${_calls.length}
.
\n
'
' Calls Received:
$_calls
\n
'
' Calls Expected:
$expected
'
);
for
(
final
MockCall
call
in
_calls
)
{
expect
(
call
.
memberSymbol
,
equals
(
expected
[
count
].
memberSymbol
),
reason:
'Unexpected call to
${call.memberName}
, expected a call to '
'
${expected[count].memberName}
instead.'
);
if
(
call
.
positionalArguments
!=
null
&&
!
expected
[
count
].
acceptAny
)
{
int
countArg
=
0
;
for
(
final
dynamic
arg
in
call
.
positionalArguments
)
{
expect
(
arg
,
equals
(
expected
[
count
].
positionalArguments
[
countArg
]),
reason:
'Failed at call
$count
. Positional argument
$countArg
to
${call.memberName}
'
'not as expected. Expected
${expected[count].positionalArguments[countArg]}
'
'and received
$arg
'
);
countArg
++;
}
}
count
++;
}
}
@override
void
noSuchMethod
(
Invocation
invocation
)
{
_calls
.
add
(
MockCall
.
fromSymbol
(
invocation
.
memberName
,
invocation
.
positionalArguments
));
}
}
const
_AnimatedIconData
movingBar
=
_AnimatedIconData
(
Size
(
48.0
,
48.0
),
<
_PathFrames
>
[
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment