diff --git a/CHANGELOG.md b/CHANGELOG.md index 2070b52..5424152 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## unreleased ([diff](https://github.com/ykmnkmi/jinja.dart/compare/c12244e6..be035c5f)) +## 0.6.0 ([diff](https://github.com/ykmnkmi/jinja.dart/compare/c12244e6..main)) - bump SDK version to 3.3.0. - update dependencies. - internal changes. @@ -8,6 +8,7 @@ - `import` - `from` - `Template`: + - `Template.fromNode({globals})` argument - `globals` field - restored: - conditional and variable `extends` statement variants @@ -35,7 +36,7 @@ - `title` - changed: - `Environment`: - - `Environment({modifiers})` from `List` to `List` + - `Environment({modifiers})` argument type from `List` to `List` - `modifiers` type from `List` to `List` - `scan(...)` return type from `List` to `Node` - `parse(...)` return type from `List` to `Node` diff --git a/README.md b/README.md index 9edcdd3..e16021d 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,6 @@ Variables, expressions, control structures and template inheritance. - `*args` and `**kwargs` arguments support removed - Auto-escaping and related statements, filters and tests have been removed due to the impossibility of extending `String`. Use the `escape` filter manually or escape values before passing them to the template. -- _work in progress_ For more information, see `CHANGELOG.md`. diff --git a/lib/loaders.dart b/lib/loaders.dart index 07295fa..1d8ee7c 100644 --- a/lib/loaders.dart +++ b/lib/loaders.dart @@ -124,9 +124,4 @@ class FileSystemLoader extends Loader { return environment.fromString(getSource(path), path: path, globals: globals); } - - @override - String toString() { - return 'FileSystemLoader(${paths.join(', ')})'; - } } diff --git a/lib/src/environment.dart b/lib/src/environment.dart index a665b51..3744999 100644 --- a/lib/src/environment.dart +++ b/lib/src/environment.dart @@ -554,7 +554,7 @@ base class Template { String render([Map? data]) { var buffer = StringBuffer(); renderTo(buffer, data); - return buffer.toString(); + return '$buffer'; } /// If no arguments are given the context will be empty. diff --git a/pubspec.yaml b/pubspec.yaml index a190866..3f6ff66 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ name: jinja -version: 0.6.0-dev.16 +version: 0.6.0 description: >- Jinja2 template engine for Dart. Variables, expressions, control structures and template inheritance. diff --git a/test/file_system_loader_test.dart b/test/file_system_loader_test.dart new file mode 100644 index 0000000..984232e --- /dev/null +++ b/test/file_system_loader_test.dart @@ -0,0 +1,41 @@ +@TestOn('vm') +library; + +import 'dart:convert'; +import 'dart:io'; + +import 'package:jinja/jinja.dart'; +import 'package:jinja/loaders.dart'; +import 'package:test/test.dart'; + +void main() { + var pathUri = Directory.current.uri.resolve('test/res/templates'); + var paths = [pathUri.path]; + + group('FileSystemLoader', () { + test('paths', () { + var loader = FileSystemLoader(paths: paths); + var env = Environment(loader: loader); + var tmpl = env.getTemplate('test.html'); + expect(tmpl.render().trim(), equals('BAR')); + tmpl = env.getTemplate('foo/test.html'); + expect(tmpl.render().trim(), equals('FOO')); + }); + + test('utf8', () { + var loader = FileSystemLoader( + paths: paths, extensions: {'txt'}, encoding: utf8); + var env = Environment(loader: loader); + var tmpl = env.getTemplate('mojibake.txt'); + expect(tmpl.render().trim(), equals('文字化け')); + }); + + test('iso-8859-1', () { + var loader = FileSystemLoader( + paths: paths, extensions: {'txt'}, encoding: latin1); + var env = Environment(loader: loader); + var tmpl = env.getTemplate('mojibake.txt'); + expect(tmpl.render().trim(), equals('æ\x96\x87\xe5\xad\x97\xe5\x8c\x96\xe3\x81\x91')); + }); + }); +} diff --git a/test/loader_test.dart b/test/loader_test.dart new file mode 100644 index 0000000..f2d268f --- /dev/null +++ b/test/loader_test.dart @@ -0,0 +1,21 @@ +@TestOn('vm || chrome') +library; + +import 'package:jinja/jinja.dart'; +import 'package:test/test.dart'; + +MapLoader mapLoader() { + return MapLoader({'justdict.html': 'FOO'}); +} + +void main() { + group('Loaders', () { + test('MapLoader', () { + var env = Environment(loader: mapLoader()); + var tmpl = env.getTemplate('justdict.html'); + expect(tmpl.render().trim(), equals('FOO')); + expect(() => env.getTemplate('missing.html'), + throwsA(isA())); + }); + }); +} diff --git a/test/res/templates/foo/test.html b/test/res/templates/foo/test.html new file mode 100644 index 0000000..d96c7ef --- /dev/null +++ b/test/res/templates/foo/test.html @@ -0,0 +1 @@ +FOO \ No newline at end of file diff --git a/test/res/templates/mojibake.txt b/test/res/templates/mojibake.txt new file mode 100644 index 0000000..0cd3e46 --- /dev/null +++ b/test/res/templates/mojibake.txt @@ -0,0 +1 @@ +文字化け \ No newline at end of file