blob: 038b51f2c6033bad07b5e2fd26067c3125820cf2 [file] [log] [blame]
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library dartdoc.model_utils_test;
import 'package:dartdoc/src/model_utils.dart';
import 'package:test/test.dart';
class ValidatingMemoizerUser extends ValidatingMemoizer {
int foo = 0;
// These are actually not things you would ordinarily memoize, because
// they change. But they are useful for testing.
List<int> _toMemoize() {
return [foo++];
}
List<int> get toMemoize => memoized(_toMemoize);
}
class MemoizerUser extends Memoizer {
int foo = 0;
// These are actually not things you would ordinarily memoize, because
// they change. But they are useful for testing.
int _toMemoize() {
return foo++;
}
int get toMemoize => memoized(_toMemoize);
String _memoizedParameter1(String param) => "${foo++} ${param}";
String memoizedParameter1(String param) =>
memoized1(_memoizedParameter1, param);
String _memoizedParameter2(String param, String param2) =>
"${foo++} ${param} ${param2}";
String memoizedParameter2(String param, String param2) =>
memoized2(_memoizedParameter2, param, param2);
String _memoizedParameter3(String param, String param2, String param3) =>
"${foo++} ${param} ${param2} ${param3}";
String memoizedParameter3(String param, String param2, String param3) =>
memoized3(_memoizedParameter3, param, param2, param3);
String _memoizedParameter4(
String param, String param2, String param3, String param4) =>
"${foo++} ${param} ${param2} ${param3} ${param4}";
String memoizedParameter4(
String param, String param2, String param3, String param4) =>
memoized4(_memoizedParameter4, param, param2, param3, param4);
String _memoizedParameter5(String param, String param2, String param3,
String param4, String param5) =>
"${foo++} ${param} ${param2} ${param3} ${param4} ${param5}";
String memoizedParameter5(String param, String param2, String param3,
String param4, String param5) =>
memoized5(_memoizedParameter5, param, param2, param3, param4, param5);
String _memoizedParameter6(String param, String param2, String param3,
String param4, String param5, String param6) =>
"${foo++} ${param} ${param2} ${param3} ${param4} ${param5} ${param6}";
String memoizedParameter6(String param, String param2, String param3,
String param4, String param5, String param6) =>
memoized6(
_memoizedParameter6, param, param2, param3, param4, param5, param6);
String _memoizedParameter7(String param, String param2, String param3,
String param4, String param5, String param6, String param7) =>
"${foo++} ${param} ${param2} ${param3} ${param4} ${param5} ${param6} ${param7}";
String memoizedParameter7(String param, String param2, String param3,
String param4, String param5, String param6, String param7) =>
memoized7(_memoizedParameter7, param, param2, param3, param4, param5,
param6, param7);
String _memoizedParameter8(
String param,
String param2,
String param3,
String param4,
String param5,
String param6,
String param7,
String param8) =>
"${foo++} ${param} ${param2} ${param3} ${param4} ${param5} ${param6} ${param7} ${param8}";
String memoizedParameter8(
String param,
String param2,
String param3,
String param4,
String param5,
String param6,
String param7,
String param8) =>
memoized8(_memoizedParameter8, param, param2, param3, param4, param5,
param6, param7, param8);
}
void main() {
group('model_utils stripIndentFromSource', () {
test('no indent', () {
expect(stripIndentFromSource('void foo() {\n print(1);\n}\n'),
'void foo() {\n print(1);\n}\n');
});
test('same indent', () {
expect(stripIndentFromSource(' void foo() {\n print(1);\n }\n'),
'void foo() {\n print(1);\n}\n');
});
test('odd indent', () {
expect(stripIndentFromSource(' void foo() {\n print(1);\n }\n'),
'void foo() {\n print(1);\n}\n');
});
});
group('model_utils stripDartdocCommentsFromSource', () {
test('no comments', () {
expect(stripDartdocCommentsFromSource('void foo() {\n print(1);\n}\n'),
'void foo() {\n print(1);\n}\n');
});
test('line comments', () {
expect(
stripDartdocCommentsFromSource(
'/// foo comment\nvoid foo() {\n print(1);\n}\n'),
'void foo() {\n print(1);\n}\n');
});
test('block comments 1', () {
expect(
stripDartdocCommentsFromSource(
'/** foo comment */\nvoid foo() {\n print(1);\n}\n'),
'void foo() {\n print(1);\n}\n');
});
test('block comments 2', () {
expect(
stripDartdocCommentsFromSource(
'/**\n * foo comment\n */\nvoid foo() {\n print(1);\n}\n'),
'void foo() {\n print(1);\n}\n');
});
});
group('model_utils ValidatingMemoizer', () {
test('assert on changing underlying function', () {
var m = new ValidatingMemoizerUser();
expect(m.toMemoize.first, equals(0));
expect(() => m.toMemoize, throwsA(new TypeMatcher<AssertionError>()));
});
});
group('model_utils Memoizer', () {
test('basic memoization and invalidation', () {
var m = new MemoizerUser();
expect(m.toMemoize, equals(0), reason: "initialization problem");
expect(m.toMemoize, equals(0), reason: "failed to memoize");
m.invalidateMemos();
expect(m.toMemoize, equals(1), reason: "failed to invalidate");
});
test('memoization of a method with parameter', () {
var m = new MemoizerUser();
expect(m.memoizedParameter1("hello"), equals("0 hello"),
reason: "initialization problem");
expect(m.memoizedParameter1("hello"), equals("0 hello"),
reason: "failed to memoize");
expect(m.memoizedParameter1("goodbye"), equals("1 goodbye"));
expect(m.memoizedParameter1("something"), equals("2 something"));
m.invalidateMemos();
expect(m.memoizedParameter1("hello"), equals("3 hello"),
reason: "failed to invalidate");
});
test('memoization of many parameters', () {
var m = new MemoizerUser();
expect(m.memoizedParameter1("hello"), equals("0 hello"));
expect(m.memoizedParameter2("hello", "obi"), equals("1 hello obi"));
expect(m.memoizedParameter3("hello", "obi", "wan"),
equals("2 hello obi wan"));
expect(m.memoizedParameter4("hello", "obi", "wan", "how"),
equals("3 hello obi wan how"));
expect(m.memoizedParameter5("hello", "obi", "wan", "how", "are"),
equals("4 hello obi wan how are"));
expect(m.memoizedParameter6("hello", "obi", "wan", "how", "are", "you"),
equals("5 hello obi wan how are you"));
expect(
m.memoizedParameter7(
"hello", "obi", "wan", "how", "are", "you", "doing"),
equals("6 hello obi wan how are you doing"));
expect(
m.memoizedParameter8(
"hello", "obi", "wan", "how", "are", "you", "doing", "today"),
equals("7 hello obi wan how are you doing today"));
expect(m.memoizedParameter1("hello"), equals("0 hello"));
expect(m.memoizedParameter2("hello", "obi"), equals("1 hello obi"));
expect(m.memoizedParameter3("hello", "obi", "wan"),
equals("2 hello obi wan"));
expect(m.memoizedParameter4("hello", "obi", "wan", "how"),
equals("3 hello obi wan how"));
expect(m.memoizedParameter5("hello", "obi", "wan", "how", "are"),
equals("4 hello obi wan how are"));
expect(m.memoizedParameter6("hello", "obi", "wan", "how", "are", "you"),
equals("5 hello obi wan how are you"));
expect(
m.memoizedParameter7(
"hello", "obi", "wan", "how", "are", "you", "doing"),
equals("6 hello obi wan how are you doing"));
expect(
m.memoizedParameter8(
"hello", "obi", "wan", "how", "are", "you", "doing", "today"),
equals("7 hello obi wan how are you doing today"));
});
});
}