| // 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 isInstanceOf<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")); |
| }); |
| }); |
| } |