From 3fc08e68ab9d7442eb822f5134993ab062f9134a Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Mon, 21 Mar 2022 16:05:09 +0100 Subject: [PATCH 01/19] add template project --- enhanced_enums/.gitignore | 6 + enhanced_enums/CHANGELOG.md | 3 + enhanced_enums/README.md | 2 + enhanced_enums/analysis_options.yaml | 30 ++ enhanced_enums/bin/enhanced_enums.dart | 5 + enhanced_enums/lib/enhanced_enums.dart | 3 + enhanced_enums/pubspec.lock | 334 +++++++++++++++++++ enhanced_enums/pubspec.yaml | 14 + enhanced_enums/test/enhanced_enums_test.dart | 8 + 9 files changed, 405 insertions(+) create mode 100644 enhanced_enums/.gitignore create mode 100644 enhanced_enums/CHANGELOG.md create mode 100644 enhanced_enums/README.md create mode 100644 enhanced_enums/analysis_options.yaml create mode 100644 enhanced_enums/bin/enhanced_enums.dart create mode 100644 enhanced_enums/lib/enhanced_enums.dart create mode 100644 enhanced_enums/pubspec.lock create mode 100644 enhanced_enums/pubspec.yaml create mode 100644 enhanced_enums/test/enhanced_enums_test.dart diff --git a/enhanced_enums/.gitignore b/enhanced_enums/.gitignore new file mode 100644 index 0000000..3c8a157 --- /dev/null +++ b/enhanced_enums/.gitignore @@ -0,0 +1,6 @@ +# Files and directories created by pub. +.dart_tool/ +.packages + +# Conventional directory for build output. +build/ diff --git a/enhanced_enums/CHANGELOG.md b/enhanced_enums/CHANGELOG.md new file mode 100644 index 0000000..effe43c --- /dev/null +++ b/enhanced_enums/CHANGELOG.md @@ -0,0 +1,3 @@ +## 1.0.0 + +- Initial version. diff --git a/enhanced_enums/README.md b/enhanced_enums/README.md new file mode 100644 index 0000000..3816eca --- /dev/null +++ b/enhanced_enums/README.md @@ -0,0 +1,2 @@ +A sample command-line application with an entrypoint in `bin/`, library code +in `lib/`, and example unit test in `test/`. diff --git a/enhanced_enums/analysis_options.yaml b/enhanced_enums/analysis_options.yaml new file mode 100644 index 0000000..dee8927 --- /dev/null +++ b/enhanced_enums/analysis_options.yaml @@ -0,0 +1,30 @@ +# This file configures the static analysis results for your project (errors, +# warnings, and lints). +# +# This enables the 'recommended' set of lints from `package:lints`. +# This set helps identify many issues that may lead to problems when running +# or consuming Dart code, and enforces writing Dart using a single, idiomatic +# style and format. +# +# If you want a smaller set of lints you can change this to specify +# 'package:lints/core.yaml'. These are just the most critical lints +# (the recommended set includes the core lints). +# The core lints are also what is used by pub.dev for scoring packages. + +include: package:lints/recommended.yaml + +# Uncomment the following section to specify additional rules. + +# linter: +# rules: +# - camel_case_types + +# analyzer: +# exclude: +# - path/to/excluded/files/** + +# For more information about the core and recommended set of lints, see +# https://dart.dev/go/core-lints + +# For additional information about configuring this file, see +# https://dart.dev/guides/language/analysis-options diff --git a/enhanced_enums/bin/enhanced_enums.dart b/enhanced_enums/bin/enhanced_enums.dart new file mode 100644 index 0000000..cad8b12 --- /dev/null +++ b/enhanced_enums/bin/enhanced_enums.dart @@ -0,0 +1,5 @@ +import 'package:enhanced_enums/enhanced_enums.dart' as enhanced_enums; + +void main(List arguments) { + print('Hello world: ${enhanced_enums.calculate()}!'); +} diff --git a/enhanced_enums/lib/enhanced_enums.dart b/enhanced_enums/lib/enhanced_enums.dart new file mode 100644 index 0000000..f64ad72 --- /dev/null +++ b/enhanced_enums/lib/enhanced_enums.dart @@ -0,0 +1,3 @@ +int calculate() { + return 6 * 7; +} diff --git a/enhanced_enums/pubspec.lock b/enhanced_enums/pubspec.lock new file mode 100644 index 0000000..38b4af5 --- /dev/null +++ b/enhanced_enums/pubspec.lock @@ -0,0 +1,334 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + url: "https://pub.dartlang.org" + source: hosted + version: "36.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.1" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.0" + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.8.2" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.16.0" + convert: + dependency: transitive + description: + name: convert + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + coverage: + dependency: transitive + description: + name: coverage + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.2" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.2" + glob: + dependency: transitive + description: + name: glob + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.0" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.0" + io: + dependency: transitive + description: + name: io + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.4" + lints: + dependency: "direct dev" + description: + name: lints + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + logging: + dependency: transitive + description: + name: logging + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.11" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.7.0" + mime: + dependency: transitive + description: + name: mime + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + node_preamble: + dependency: transitive + description: + name: node_preamble + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + package_config: + dependency: transitive + description: + name: package_config + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.1" + pool: + dependency: transitive + description: + name: pool + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.0" + pub_semver: + dependency: transitive + description: + name: pub_semver + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + shelf: + dependency: transitive + description: + name: shelf + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0" + shelf_static: + dependency: transitive + description: + name: shelf_static + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + source_maps: + dependency: transitive + description: + name: source_maps + url: "https://pub.dartlang.org" + source: hosted + version: "0.10.10" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.2" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + test: + dependency: "direct dev" + description: + name: test + url: "https://pub.dartlang.org" + source: hosted + version: "1.20.2" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.9" + test_core: + dependency: transitive + description: + name: test_core + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.11" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + vm_service: + dependency: transitive + description: + name: vm_service + url: "https://pub.dartlang.org" + source: hosted + version: "8.2.2" + watcher: + dependency: transitive + description: + name: watcher + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + yaml: + dependency: transitive + description: + name: yaml + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" +sdks: + dart: ">=2.17.0-182.1.beta <3.0.0" diff --git a/enhanced_enums/pubspec.yaml b/enhanced_enums/pubspec.yaml new file mode 100644 index 0000000..83dd997 --- /dev/null +++ b/enhanced_enums/pubspec.yaml @@ -0,0 +1,14 @@ +name: enhanced_enums +description: A sample command-line application. +version: 1.0.0 +# homepage: https://www.example.com + +environment: + sdk: '>=2.17.0-182.1.beta <3.0.0' + +# dependencies: +# path: ^1.8.0 + +dev_dependencies: + lints: ^1.0.0 + test: ^1.16.0 diff --git a/enhanced_enums/test/enhanced_enums_test.dart b/enhanced_enums/test/enhanced_enums_test.dart new file mode 100644 index 0000000..f7536c4 --- /dev/null +++ b/enhanced_enums/test/enhanced_enums_test.dart @@ -0,0 +1,8 @@ +import 'package:enhanced_enums/enhanced_enums.dart'; +import 'package:test/test.dart'; + +void main() { + test('calculate', () { + expect(calculate(), 42); + }); +} From 6647b06d1d58f83c2f340086ac2a0431c16e72b6 Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Mon, 21 Mar 2022 17:33:11 +0100 Subject: [PATCH 02/19] Created enhanced enums example --- enhanced_enums/bin/enhanced_enums.dart | 5 -- enhanced_enums/lib/enhanced_enums.dart | 59 +++++++++++++++++++- enhanced_enums/test/enhanced_enums_test.dart | 26 ++++++++- 3 files changed, 81 insertions(+), 9 deletions(-) delete mode 100644 enhanced_enums/bin/enhanced_enums.dart diff --git a/enhanced_enums/bin/enhanced_enums.dart b/enhanced_enums/bin/enhanced_enums.dart deleted file mode 100644 index cad8b12..0000000 --- a/enhanced_enums/bin/enhanced_enums.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:enhanced_enums/enhanced_enums.dart' as enhanced_enums; - -void main(List arguments) { - print('Hello world: ${enhanced_enums.calculate()}!'); -} diff --git a/enhanced_enums/lib/enhanced_enums.dart b/enhanced_enums/lib/enhanced_enums.dart index f64ad72..f4fb880 100644 --- a/enhanced_enums/lib/enhanced_enums.dart +++ b/enhanced_enums/lib/enhanced_enums.dart @@ -1,3 +1,58 @@ -int calculate() { - return 6 * 7; +/// Enum that represents different types of vehicles. +enum Vehicle with FlatTireMixin, Traveler implements Comparable { + car(tires: 4, passengers: 5, carbonPerKilometer: 400), + bus(tires: 6, passengers: 50, carbonPerKilometer: 800), + bicycle(tires: 2, passengers: 1, carbonPerKilometer: 0); + + const Vehicle({ + required this.tires, + required this.passengers, + required this.carbonPerKilometer, + }); + + /// Number of tires of this Vehicle, part of [FlatTireMixin]. + @override + final int tires; + + /// Number of passengers the Vehicle can transport. + final int passengers; + + /// Carbon in grams per kilometer. + final int carbonPerKilometer; + + /// Method that calculates the Carbon Footprint of a Vehicle per passenger. + int get carbonFootprint => (carbonPerKilometer / passengers).round(); + + /// Comparable uses [carbonFootprint] to compare Vehicles. + @override + int compareTo(Vehicle other) => carbonFootprint - other.carbonFootprint; +} + +/// Mixin that adds extra functionality. +/// +/// This Mixin introduces the [tires] member and a method [costToReplaceTires] +/// to calculate the cost of replacing the tires. +mixin FlatTireMixin { + /// Fixed fee to add to the total cost. + static const fee = 50; + + /// Number of tires getter, to be implemented by Enum. + int get tires; + + /// Calcultes the price to replace all tires. + int costToReplaceTires({required int pricePerTire}) { + return tires * pricePerTire + fee; + } +} + +/// Mixin that adds Enum specific functionality +/// +/// This mixin adds the [travel] method, that returns a String +/// with the Enum name in it. +/// +/// This mixin can access the property [name] from the Enum. +mixin Traveler on Enum { + String travel() { + return 'I am traveling in a $name!'; + } } diff --git a/enhanced_enums/test/enhanced_enums_test.dart b/enhanced_enums/test/enhanced_enums_test.dart index f7536c4..17c3e57 100644 --- a/enhanced_enums/test/enhanced_enums_test.dart +++ b/enhanced_enums/test/enhanced_enums_test.dart @@ -2,7 +2,29 @@ import 'package:enhanced_enums/enhanced_enums.dart'; import 'package:test/test.dart'; void main() { - test('calculate', () { - expect(calculate(), 42); + test('Calculate efficiency of Vehicles', () { + expect(Vehicle.bicycle.carbonFootprint, 0); + expect(Vehicle.bus.carbonFootprint, 16); + expect(Vehicle.car.carbonFootprint, 80); + }); + + test('Sort Vehicles by carbon footprint', () { + final vehicles = Vehicle.values.toList(); + + // Sort using compareTo + vehicles.sort(); + + // Expect order from more efficient to less efficient + expect(vehicles, [Vehicle.bicycle, Vehicle.bus, Vehicle.car]); + }); + + test('Calculate cost to replace tires', () { + expect(Vehicle.bicycle.costToReplaceTires(pricePerTire: 10), 70); + expect(Vehicle.car.costToReplaceTires(pricePerTire: 60), 290); + expect(Vehicle.bus.costToReplaceTires(pricePerTire: 100), 650); + }); + + test('Travel in a car', () { + expect(Vehicle.car.travel(), 'I am traveling in a car!'); }); } From 258a6551c3a1c2dcb15877de735a89818b093cba Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Mon, 21 Mar 2022 17:44:17 +0100 Subject: [PATCH 03/19] Add plain enum example --- enhanced_enums/README.md | 27 +++++++++++++++++++++++++-- enhanced_enums/example/plain.dart | 4 ++++ enhanced_enums/test/plain_test.dart | 17 +++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 enhanced_enums/example/plain.dart create mode 100644 enhanced_enums/test/plain_test.dart diff --git a/enhanced_enums/README.md b/enhanced_enums/README.md index 3816eca..f7a6fff 100644 --- a/enhanced_enums/README.md +++ b/enhanced_enums/README.md @@ -1,2 +1,25 @@ -A sample command-line application with an entrypoint in `bin/`, library code -in `lib/`, and example unit test in `test/`. +# Enhancend enums samples + +This a set of samples that demonstrates the enhanced enums syntax +and shows some common use cases of the feature. + +This feature was added in Dart 2.XX. The programs in this folder won't +compile in earlier versions. + +## Instructions + +Read the source code in the `example/` directory. + +TODO: Complete this sections + +The code is split into +separate files according to topics or use cases. For instance, +`example/generics.dart` explores the intersection between extension methods +and generic types, while `example/operator_extensions.dart` shows how +you can extend classes with operators. + +The files in `lib/` are support for the samples in `example/`. For instance, +`lib/some_api.dart` is pretending to be an API from another package (because +a common use case for extension methods is to modify classes whose source +code we cannot edit). + diff --git a/enhanced_enums/example/plain.dart b/enhanced_enums/example/plain.dart new file mode 100644 index 0000000..81ef305 --- /dev/null +++ b/enhanced_enums/example/plain.dart @@ -0,0 +1,4 @@ +/// Plain enum +enum Plain { + foo, bar, baz +} \ No newline at end of file diff --git a/enhanced_enums/test/plain_test.dart b/enhanced_enums/test/plain_test.dart new file mode 100644 index 0000000..7370c97 --- /dev/null +++ b/enhanced_enums/test/plain_test.dart @@ -0,0 +1,17 @@ +import 'package:test/test.dart'; + +import '../example/plain.dart'; + +void main() { + test('Plain enum names', () { + expect(Plain.foo.name, 'foo'); + expect(Plain.bar.name, 'bar'); + expect(Plain.baz.name, 'baz'); + }); + + test('Plain enum index', () { + expect(Plain.foo.index, 0); + expect(Plain.bar.index, 1); + expect(Plain.baz.index, 2); + }); +} From 0ba47620c5cab1e061d9545b6acf4ca4b89b2606 Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Mon, 21 Mar 2022 17:52:45 +0100 Subject: [PATCH 04/19] add enum with comparable --- enhanced_enums/example/comparable.dart | 13 +++++++++++++ enhanced_enums/test/comparable_test.dart | 16 ++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 enhanced_enums/example/comparable.dart create mode 100644 enhanced_enums/test/comparable_test.dart diff --git a/enhanced_enums/example/comparable.dart b/enhanced_enums/example/comparable.dart new file mode 100644 index 0000000..0c656de --- /dev/null +++ b/enhanced_enums/example/comparable.dart @@ -0,0 +1,13 @@ +/// Enum that implements a Comparable +enum Quantity implements Comparable { + zero(0), + one(1), + many(99); + + final int quantity; + + const Quantity(this.quantity); + + @override + int compareTo(Quantity other) => quantity - other.quantity; +} diff --git a/enhanced_enums/test/comparable_test.dart b/enhanced_enums/test/comparable_test.dart new file mode 100644 index 0000000..96a06e8 --- /dev/null +++ b/enhanced_enums/test/comparable_test.dart @@ -0,0 +1,16 @@ +import 'package:test/test.dart'; + +import '../example/comparable.dart'; + +void main() { + test('Sort Quantity enum using compareTo', () { + // unsorted list + final list = [Quantity.many, Quantity.zero, Quantity.one]; + + // sort using compareTo + list.sort(); + + // list is sorted by amount + expect(list, [Quantity.zero, Quantity.one, Quantity.many]); + }); +} From 2093c8433a02f3a8c88f0b0d36404f357c732198 Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Mon, 21 Mar 2022 18:08:56 +0100 Subject: [PATCH 05/19] add comparable mixin --- enhanced_enums/example/comparable_mixin.dart | 11 +++++++++++ enhanced_enums/test/comparable_mixin_test.dart | 16 ++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 enhanced_enums/example/comparable_mixin.dart create mode 100644 enhanced_enums/test/comparable_mixin_test.dart diff --git a/enhanced_enums/example/comparable_mixin.dart b/enhanced_enums/example/comparable_mixin.dart new file mode 100644 index 0000000..7ad1fdf --- /dev/null +++ b/enhanced_enums/example/comparable_mixin.dart @@ -0,0 +1,11 @@ +/// Enum that implements a Comparable using a mixin +enum Ordering with EnumIndexOrdering { + zero, + few, + many; +} + +mixin EnumIndexOrdering on Enum implements Comparable { + @override + int compareTo(T other) => index - other.index; +} diff --git a/enhanced_enums/test/comparable_mixin_test.dart b/enhanced_enums/test/comparable_mixin_test.dart new file mode 100644 index 0000000..0338850 --- /dev/null +++ b/enhanced_enums/test/comparable_mixin_test.dart @@ -0,0 +1,16 @@ +import 'package:test/test.dart'; + +import '../example/comparable_mixin.dart'; + +void main() { + test('Sort enum using compareTo in mixin', () { + // unsorted list + final list = [Ordering.many, Ordering.zero, Ordering.few]; + + // sort using compareTo + list.sort(); + + // list is sorted by amount + expect(list, [Ordering.zero, Ordering.few, Ordering.many]); + }); +} From 6264a3ceed9942ae708a2435baa04d0161ec54c1 Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Mon, 21 Mar 2022 18:15:50 +0100 Subject: [PATCH 06/19] update README --- enhanced_enums/README.md | 19 +++++++------------ enhanced_enums/lib/enhanced_enums.dart | 3 +++ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/enhanced_enums/README.md b/enhanced_enums/README.md index f7a6fff..cad2849 100644 --- a/enhanced_enums/README.md +++ b/enhanced_enums/README.md @@ -8,18 +8,13 @@ compile in earlier versions. ## Instructions -Read the source code in the `example/` directory. - -TODO: Complete this sections - -The code is split into +Read the source code in the `example/` directory. The code is split into separate files according to topics or use cases. For instance, -`example/generics.dart` explores the intersection between extension methods -and generic types, while `example/operator_extensions.dart` shows how -you can extend classes with operators. +`example/comparable_mixin.dart` demonstrates how a mixin can be used to add +extra functionality to an enum. -The files in `lib/` are support for the samples in `example/`. For instance, -`lib/some_api.dart` is pretending to be an API from another package (because -a common use case for extension methods is to modify classes whose source -code we cannot edit). +In `lib/` you will find a complete example using all the functionality from +enhanced enums. +In `test/` you will find unit tests showing how the enums from the examples +can be used. diff --git a/enhanced_enums/lib/enhanced_enums.dart b/enhanced_enums/lib/enhanced_enums.dart index f4fb880..e743bc9 100644 --- a/enhanced_enums/lib/enhanced_enums.dart +++ b/enhanced_enums/lib/enhanced_enums.dart @@ -1,3 +1,6 @@ +/// Complete example that showcases the different usecases for dart enums +/// in a real scenario. +/// /// Enum that represents different types of vehicles. enum Vehicle with FlatTireMixin, Traveler implements Comparable { car(tires: 4, passengers: 5, carbonPerKilometer: 400), From d301c87912190af5fd34e8b76dc4e750113bedbe Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Mon, 21 Mar 2022 19:51:00 +0100 Subject: [PATCH 07/19] refactor and final cleanup --- enhanced_enums/README.md | 8 ++++---- enhanced_enums/example/plain.dart | 4 ---- enhanced_enums/{example => lib}/comparable.dart | 0 .../{example => lib}/comparable_mixin.dart | 1 + ...nhanced_enums.dart => complete_example.dart} | 0 enhanced_enums/lib/members.dart | 17 +++++++++++++++++ enhanced_enums/lib/plain.dart | 6 ++++++ enhanced_enums/lib/typed_enum.dart | 11 +++++++++++ enhanced_enums/test/comparable_mixin_test.dart | 2 +- enhanced_enums/test/comparable_test.dart | 2 +- ...ums_test.dart => complete_example_test.dart} | 2 +- enhanced_enums/test/members_test.dart | 10 ++++++++++ enhanced_enums/test/plain_test.dart | 8 ++++++-- enhanced_enums/test/typed_enum_test.dart | 9 +++++++++ 14 files changed, 67 insertions(+), 13 deletions(-) delete mode 100644 enhanced_enums/example/plain.dart rename enhanced_enums/{example => lib}/comparable.dart (100%) rename enhanced_enums/{example => lib}/comparable_mixin.dart (82%) rename enhanced_enums/lib/{enhanced_enums.dart => complete_example.dart} (100%) create mode 100644 enhanced_enums/lib/members.dart create mode 100644 enhanced_enums/lib/plain.dart create mode 100644 enhanced_enums/lib/typed_enum.dart rename enhanced_enums/test/{enhanced_enums_test.dart => complete_example_test.dart} (94%) create mode 100644 enhanced_enums/test/members_test.dart create mode 100644 enhanced_enums/test/typed_enum_test.dart diff --git a/enhanced_enums/README.md b/enhanced_enums/README.md index cad2849..6c25c78 100644 --- a/enhanced_enums/README.md +++ b/enhanced_enums/README.md @@ -8,13 +8,13 @@ compile in earlier versions. ## Instructions -Read the source code in the `example/` directory. The code is split into +Read the source code in the `lib/` directory. The code is split into separate files according to topics or use cases. For instance, -`example/comparable_mixin.dart` demonstrates how a mixin can be used to add +`lin/comparable_mixin.dart` demonstrates how a mixin can be used to add extra functionality to an enum. -In `lib/` you will find a complete example using all the functionality from -enhanced enums. +In `lib/complete_example.dart` you will find a complete example +using all the functionality from enhanced enums. In `test/` you will find unit tests showing how the enums from the examples can be used. diff --git a/enhanced_enums/example/plain.dart b/enhanced_enums/example/plain.dart deleted file mode 100644 index 81ef305..0000000 --- a/enhanced_enums/example/plain.dart +++ /dev/null @@ -1,4 +0,0 @@ -/// Plain enum -enum Plain { - foo, bar, baz -} \ No newline at end of file diff --git a/enhanced_enums/example/comparable.dart b/enhanced_enums/lib/comparable.dart similarity index 100% rename from enhanced_enums/example/comparable.dart rename to enhanced_enums/lib/comparable.dart diff --git a/enhanced_enums/example/comparable_mixin.dart b/enhanced_enums/lib/comparable_mixin.dart similarity index 82% rename from enhanced_enums/example/comparable_mixin.dart rename to enhanced_enums/lib/comparable_mixin.dart index 7ad1fdf..b652120 100644 --- a/enhanced_enums/example/comparable_mixin.dart +++ b/enhanced_enums/lib/comparable_mixin.dart @@ -5,6 +5,7 @@ enum Ordering with EnumIndexOrdering { many; } +/// Mixin that uses the enum index to create a comparable mixin EnumIndexOrdering on Enum implements Comparable { @override int compareTo(T other) => index - other.index; diff --git a/enhanced_enums/lib/enhanced_enums.dart b/enhanced_enums/lib/complete_example.dart similarity index 100% rename from enhanced_enums/lib/enhanced_enums.dart rename to enhanced_enums/lib/complete_example.dart diff --git a/enhanced_enums/lib/members.dart b/enhanced_enums/lib/members.dart new file mode 100644 index 0000000..f3382db --- /dev/null +++ b/enhanced_enums/lib/members.dart @@ -0,0 +1,17 @@ +/// Enum with members and named constructor. +/// +/// Also shows an example of [toString] override. +enum LogPriority { + warning(2, "Warning"), + error(1, "Error"), + log.unknown("Log"); + + const LogPriority(this.priority, this.prefix); + const LogPriority.unknown(String prefix) : this(-1, prefix); + + final int priority; + final String prefix; + + @override + String toString() => '$prefix($priority)'; +} diff --git a/enhanced_enums/lib/plain.dart b/enhanced_enums/lib/plain.dart new file mode 100644 index 0000000..a94f015 --- /dev/null +++ b/enhanced_enums/lib/plain.dart @@ -0,0 +1,6 @@ +/// Plain enum. +/// +/// This enum doesn't use any of enhancements. +enum Plain { + foo, bar, baz +} \ No newline at end of file diff --git a/enhanced_enums/lib/typed_enum.dart b/enhanced_enums/lib/typed_enum.dart new file mode 100644 index 0000000..b3bd703 --- /dev/null +++ b/enhanced_enums/lib/typed_enum.dart @@ -0,0 +1,11 @@ +/// Enum with a Type. +/// +/// The type [T] is used to define the type of [List] the enum contains. +enum EnumWithType { + numbers([1, 2, 3]), + strings(['A', 'B', 'C']); + + final List items; + + const EnumWithType(this.items); +} diff --git a/enhanced_enums/test/comparable_mixin_test.dart b/enhanced_enums/test/comparable_mixin_test.dart index 0338850..b6670e7 100644 --- a/enhanced_enums/test/comparable_mixin_test.dart +++ b/enhanced_enums/test/comparable_mixin_test.dart @@ -1,6 +1,6 @@ +import 'package:enhanced_enums/comparable_mixin.dart'; import 'package:test/test.dart'; -import '../example/comparable_mixin.dart'; void main() { test('Sort enum using compareTo in mixin', () { diff --git a/enhanced_enums/test/comparable_test.dart b/enhanced_enums/test/comparable_test.dart index 96a06e8..e359cb1 100644 --- a/enhanced_enums/test/comparable_test.dart +++ b/enhanced_enums/test/comparable_test.dart @@ -1,6 +1,6 @@ +import 'package:enhanced_enums/comparable.dart'; import 'package:test/test.dart'; -import '../example/comparable.dart'; void main() { test('Sort Quantity enum using compareTo', () { diff --git a/enhanced_enums/test/enhanced_enums_test.dart b/enhanced_enums/test/complete_example_test.dart similarity index 94% rename from enhanced_enums/test/enhanced_enums_test.dart rename to enhanced_enums/test/complete_example_test.dart index 17c3e57..17c44ff 100644 --- a/enhanced_enums/test/enhanced_enums_test.dart +++ b/enhanced_enums/test/complete_example_test.dart @@ -1,4 +1,4 @@ -import 'package:enhanced_enums/enhanced_enums.dart'; +import 'package:enhanced_enums/complete_example.dart'; import 'package:test/test.dart'; void main() { diff --git a/enhanced_enums/test/members_test.dart b/enhanced_enums/test/members_test.dart new file mode 100644 index 0000000..f3a6194 --- /dev/null +++ b/enhanced_enums/test/members_test.dart @@ -0,0 +1,10 @@ +import 'package:enhanced_enums/members.dart'; +import 'package:test/test.dart'; + +void main() { + test('Enum with members to String', () { + expect(LogPriority.warning.toString(), 'Warning(2)'); + expect(LogPriority.error.toString(), 'Error(1)'); + expect(LogPriority.log.toString(), 'Log(-1)'); + }); +} diff --git a/enhanced_enums/test/plain_test.dart b/enhanced_enums/test/plain_test.dart index 7370c97..00e2f42 100644 --- a/enhanced_enums/test/plain_test.dart +++ b/enhanced_enums/test/plain_test.dart @@ -1,7 +1,6 @@ +import 'package:enhanced_enums/plain.dart'; import 'package:test/test.dart'; -import '../example/plain.dart'; - void main() { test('Plain enum names', () { expect(Plain.foo.name, 'foo'); @@ -14,4 +13,9 @@ void main() { expect(Plain.bar.index, 1); expect(Plain.baz.index, 2); }); + + test('Get Plain enum values', () { + expect(Plain.values, [Plain.foo, Plain.bar, Plain.baz]); + }); + } diff --git a/enhanced_enums/test/typed_enum_test.dart b/enhanced_enums/test/typed_enum_test.dart new file mode 100644 index 0000000..bd5cae3 --- /dev/null +++ b/enhanced_enums/test/typed_enum_test.dart @@ -0,0 +1,9 @@ +import 'package:enhanced_enums/typed_enum.dart'; +import 'package:test/test.dart'; + +void main() { + test('Use typed enum', () { + expect(EnumWithType.numbers.items, [1, 2, 3]); + expect(EnumWithType.strings.items, ['A', 'B', 'C']); + }); +} From 405bc071d4dc51120eb2d87caa924dfa0195f7f8 Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Mon, 21 Mar 2022 19:52:24 +0100 Subject: [PATCH 08/19] more cleanup --- enhanced_enums/CHANGELOG.md | 3 --- enhanced_enums/analysis_options.yaml | 31 +--------------------------- enhanced_enums/pubspec.yaml | 8 +++---- 3 files changed, 4 insertions(+), 38 deletions(-) delete mode 100644 enhanced_enums/CHANGELOG.md diff --git a/enhanced_enums/CHANGELOG.md b/enhanced_enums/CHANGELOG.md deleted file mode 100644 index effe43c..0000000 --- a/enhanced_enums/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.0 - -- Initial version. diff --git a/enhanced_enums/analysis_options.yaml b/enhanced_enums/analysis_options.yaml index dee8927..ea2c9e9 100644 --- a/enhanced_enums/analysis_options.yaml +++ b/enhanced_enums/analysis_options.yaml @@ -1,30 +1 @@ -# This file configures the static analysis results for your project (errors, -# warnings, and lints). -# -# This enables the 'recommended' set of lints from `package:lints`. -# This set helps identify many issues that may lead to problems when running -# or consuming Dart code, and enforces writing Dart using a single, idiomatic -# style and format. -# -# If you want a smaller set of lints you can change this to specify -# 'package:lints/core.yaml'. These are just the most critical lints -# (the recommended set includes the core lints). -# The core lints are also what is used by pub.dev for scoring packages. - -include: package:lints/recommended.yaml - -# Uncomment the following section to specify additional rules. - -# linter: -# rules: -# - camel_case_types - -# analyzer: -# exclude: -# - path/to/excluded/files/** - -# For more information about the core and recommended set of lints, see -# https://dart.dev/go/core-lints - -# For additional information about configuring this file, see -# https://dart.dev/guides/language/analysis-options +include: package:lints/recommended.yaml \ No newline at end of file diff --git a/enhanced_enums/pubspec.yaml b/enhanced_enums/pubspec.yaml index 83dd997..229ec9a 100644 --- a/enhanced_enums/pubspec.yaml +++ b/enhanced_enums/pubspec.yaml @@ -1,14 +1,12 @@ name: enhanced_enums description: A sample command-line application. -version: 1.0.0 -# homepage: https://www.example.com + +# This example isn't intended for publishing on pub.dev. +publish_to: none environment: sdk: '>=2.17.0-182.1.beta <3.0.0' -# dependencies: -# path: ^1.8.0 - dev_dependencies: lints: ^1.0.0 test: ^1.16.0 From 4e6b566c9beeeea41d3b6aa25cbecec68bde04b6 Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Mon, 21 Mar 2022 20:00:09 +0100 Subject: [PATCH 09/19] add end lines --- enhanced_enums/analysis_options.yaml | 2 +- enhanced_enums/lib/plain.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/enhanced_enums/analysis_options.yaml b/enhanced_enums/analysis_options.yaml index ea2c9e9..572dd23 100644 --- a/enhanced_enums/analysis_options.yaml +++ b/enhanced_enums/analysis_options.yaml @@ -1 +1 @@ -include: package:lints/recommended.yaml \ No newline at end of file +include: package:lints/recommended.yaml diff --git a/enhanced_enums/lib/plain.dart b/enhanced_enums/lib/plain.dart index a94f015..1c73ab9 100644 --- a/enhanced_enums/lib/plain.dart +++ b/enhanced_enums/lib/plain.dart @@ -3,4 +3,4 @@ /// This enum doesn't use any of enhancements. enum Plain { foo, bar, baz -} \ No newline at end of file +} From 51a8926421d011015e9c293e6c1b210a34b93f5f Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Tue, 22 Mar 2022 16:05:12 +0100 Subject: [PATCH 10/19] removed pubspec.lock --- enhanced_enums/pubspec.lock | 334 ------------------------------------ 1 file changed, 334 deletions(-) delete mode 100644 enhanced_enums/pubspec.lock diff --git a/enhanced_enums/pubspec.lock b/enhanced_enums/pubspec.lock deleted file mode 100644 index 38b4af5..0000000 --- a/enhanced_enums/pubspec.lock +++ /dev/null @@ -1,334 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - url: "https://pub.dartlang.org" - source: hosted - version: "36.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - url: "https://pub.dartlang.org" - source: hosted - version: "3.3.1" - args: - dependency: transitive - description: - name: args - url: "https://pub.dartlang.org" - source: hosted - version: "2.3.0" - async: - dependency: transitive - description: - name: async - url: "https://pub.dartlang.org" - source: hosted - version: "2.8.2" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.0" - charcode: - dependency: transitive - description: - name: charcode - url: "https://pub.dartlang.org" - source: hosted - version: "1.3.1" - collection: - dependency: transitive - description: - name: collection - url: "https://pub.dartlang.org" - source: hosted - version: "1.16.0" - convert: - dependency: transitive - description: - name: convert - url: "https://pub.dartlang.org" - source: hosted - version: "3.0.1" - coverage: - dependency: transitive - description: - name: coverage - url: "https://pub.dartlang.org" - source: hosted - version: "1.1.0" - crypto: - dependency: transitive - description: - name: crypto - url: "https://pub.dartlang.org" - source: hosted - version: "3.0.1" - file: - dependency: transitive - description: - name: file - url: "https://pub.dartlang.org" - source: hosted - version: "6.1.2" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.2" - glob: - dependency: transitive - description: - name: glob - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.2" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - url: "https://pub.dartlang.org" - source: hosted - version: "3.2.0" - http_parser: - dependency: transitive - description: - name: http_parser - url: "https://pub.dartlang.org" - source: hosted - version: "4.0.0" - io: - dependency: transitive - description: - name: io - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.3" - js: - dependency: transitive - description: - name: js - url: "https://pub.dartlang.org" - source: hosted - version: "0.6.4" - lints: - dependency: "direct dev" - description: - name: lints - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.1" - logging: - dependency: transitive - description: - name: logging - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.2" - matcher: - dependency: transitive - description: - name: matcher - url: "https://pub.dartlang.org" - source: hosted - version: "0.12.11" - meta: - dependency: transitive - description: - name: meta - url: "https://pub.dartlang.org" - source: hosted - version: "1.7.0" - mime: - dependency: transitive - description: - name: mime - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.1" - node_preamble: - dependency: transitive - description: - name: node_preamble - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.1" - package_config: - dependency: transitive - description: - name: package_config - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.2" - path: - dependency: transitive - description: - name: path - url: "https://pub.dartlang.org" - source: hosted - version: "1.8.1" - pool: - dependency: transitive - description: - name: pool - url: "https://pub.dartlang.org" - source: hosted - version: "1.5.0" - pub_semver: - dependency: transitive - description: - name: pub_semver - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.1" - shelf: - dependency: transitive - description: - name: shelf - url: "https://pub.dartlang.org" - source: hosted - version: "1.2.0" - shelf_packages_handler: - dependency: transitive - description: - name: shelf_packages_handler - url: "https://pub.dartlang.org" - source: hosted - version: "3.0.0" - shelf_static: - dependency: transitive - description: - name: shelf_static - url: "https://pub.dartlang.org" - source: hosted - version: "1.1.0" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.1" - source_map_stack_trace: - dependency: transitive - description: - name: source_map_stack_trace - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.0" - source_maps: - dependency: transitive - description: - name: source_maps - url: "https://pub.dartlang.org" - source: hosted - version: "0.10.10" - source_span: - dependency: transitive - description: - name: source_span - url: "https://pub.dartlang.org" - source: hosted - version: "1.8.2" - stack_trace: - dependency: transitive - description: - name: stack_trace - url: "https://pub.dartlang.org" - source: hosted - version: "1.10.0" - stream_channel: - dependency: transitive - description: - name: stream_channel - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.0" - string_scanner: - dependency: transitive - description: - name: string_scanner - url: "https://pub.dartlang.org" - source: hosted - version: "1.1.0" - term_glyph: - dependency: transitive - description: - name: term_glyph - url: "https://pub.dartlang.org" - source: hosted - version: "1.2.0" - test: - dependency: "direct dev" - description: - name: test - url: "https://pub.dartlang.org" - source: hosted - version: "1.20.2" - test_api: - dependency: transitive - description: - name: test_api - url: "https://pub.dartlang.org" - source: hosted - version: "0.4.9" - test_core: - dependency: transitive - description: - name: test_core - url: "https://pub.dartlang.org" - source: hosted - version: "0.4.11" - typed_data: - dependency: transitive - description: - name: typed_data - url: "https://pub.dartlang.org" - source: hosted - version: "1.3.0" - vm_service: - dependency: transitive - description: - name: vm_service - url: "https://pub.dartlang.org" - source: hosted - version: "8.2.2" - watcher: - dependency: transitive - description: - name: watcher - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.1" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.0" - webkit_inspection_protocol: - dependency: transitive - description: - name: webkit_inspection_protocol - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.0" - yaml: - dependency: transitive - description: - name: yaml - url: "https://pub.dartlang.org" - source: hosted - version: "3.1.0" -sdks: - dart: ">=2.17.0-182.1.beta <3.0.0" From 5759d28c4b8ca993f30a7054911afe89ff9b8d2f Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Tue, 22 Mar 2022 16:33:14 +0100 Subject: [PATCH 11/19] Add copyright notice --- enhanced_enums/lib/comparable.dart | 4 ++++ enhanced_enums/lib/comparable_mixin.dart | 4 ++++ enhanced_enums/lib/complete_example.dart | 4 ++++ enhanced_enums/lib/members.dart | 4 ++++ enhanced_enums/lib/plain.dart | 4 ++++ enhanced_enums/lib/typed_enum.dart | 4 ++++ enhanced_enums/test/comparable_mixin_test.dart | 4 ++++ enhanced_enums/test/comparable_test.dart | 4 ++++ enhanced_enums/test/complete_example_test.dart | 4 ++++ enhanced_enums/test/members_test.dart | 4 ++++ enhanced_enums/test/plain_test.dart | 4 ++++ enhanced_enums/test/typed_enum_test.dart | 4 ++++ 12 files changed, 48 insertions(+) diff --git a/enhanced_enums/lib/comparable.dart b/enhanced_enums/lib/comparable.dart index 0c656de..f9b73bc 100644 --- a/enhanced_enums/lib/comparable.dart +++ b/enhanced_enums/lib/comparable.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2022, 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. + /// Enum that implements a Comparable enum Quantity implements Comparable { zero(0), diff --git a/enhanced_enums/lib/comparable_mixin.dart b/enhanced_enums/lib/comparable_mixin.dart index b652120..e9d50e2 100644 --- a/enhanced_enums/lib/comparable_mixin.dart +++ b/enhanced_enums/lib/comparable_mixin.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2022, 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. + /// Enum that implements a Comparable using a mixin enum Ordering with EnumIndexOrdering { zero, diff --git a/enhanced_enums/lib/complete_example.dart b/enhanced_enums/lib/complete_example.dart index e743bc9..007063e 100644 --- a/enhanced_enums/lib/complete_example.dart +++ b/enhanced_enums/lib/complete_example.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2022, 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. + /// Complete example that showcases the different usecases for dart enums /// in a real scenario. /// diff --git a/enhanced_enums/lib/members.dart b/enhanced_enums/lib/members.dart index f3382db..f0c32a3 100644 --- a/enhanced_enums/lib/members.dart +++ b/enhanced_enums/lib/members.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2022, 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. + /// Enum with members and named constructor. /// /// Also shows an example of [toString] override. diff --git a/enhanced_enums/lib/plain.dart b/enhanced_enums/lib/plain.dart index 1c73ab9..5d2fc36 100644 --- a/enhanced_enums/lib/plain.dart +++ b/enhanced_enums/lib/plain.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2022, 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. + /// Plain enum. /// /// This enum doesn't use any of enhancements. diff --git a/enhanced_enums/lib/typed_enum.dart b/enhanced_enums/lib/typed_enum.dart index b3bd703..0ac986a 100644 --- a/enhanced_enums/lib/typed_enum.dart +++ b/enhanced_enums/lib/typed_enum.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2022, 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. + /// Enum with a Type. /// /// The type [T] is used to define the type of [List] the enum contains. diff --git a/enhanced_enums/test/comparable_mixin_test.dart b/enhanced_enums/test/comparable_mixin_test.dart index b6670e7..237462a 100644 --- a/enhanced_enums/test/comparable_mixin_test.dart +++ b/enhanced_enums/test/comparable_mixin_test.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2022, 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. + import 'package:enhanced_enums/comparable_mixin.dart'; import 'package:test/test.dart'; diff --git a/enhanced_enums/test/comparable_test.dart b/enhanced_enums/test/comparable_test.dart index e359cb1..dcac770 100644 --- a/enhanced_enums/test/comparable_test.dart +++ b/enhanced_enums/test/comparable_test.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2022, 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. + import 'package:enhanced_enums/comparable.dart'; import 'package:test/test.dart'; diff --git a/enhanced_enums/test/complete_example_test.dart b/enhanced_enums/test/complete_example_test.dart index 17c44ff..79e8fb0 100644 --- a/enhanced_enums/test/complete_example_test.dart +++ b/enhanced_enums/test/complete_example_test.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2022, 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. + import 'package:enhanced_enums/complete_example.dart'; import 'package:test/test.dart'; diff --git a/enhanced_enums/test/members_test.dart b/enhanced_enums/test/members_test.dart index f3a6194..65f9a8d 100644 --- a/enhanced_enums/test/members_test.dart +++ b/enhanced_enums/test/members_test.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2022, 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. + import 'package:enhanced_enums/members.dart'; import 'package:test/test.dart'; diff --git a/enhanced_enums/test/plain_test.dart b/enhanced_enums/test/plain_test.dart index 00e2f42..267a8b5 100644 --- a/enhanced_enums/test/plain_test.dart +++ b/enhanced_enums/test/plain_test.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2022, 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. + import 'package:enhanced_enums/plain.dart'; import 'package:test/test.dart'; diff --git a/enhanced_enums/test/typed_enum_test.dart b/enhanced_enums/test/typed_enum_test.dart index bd5cae3..c828ee9 100644 --- a/enhanced_enums/test/typed_enum_test.dart +++ b/enhanced_enums/test/typed_enum_test.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2022, 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. + import 'package:enhanced_enums/typed_enum.dart'; import 'package:test/test.dart'; From d1f9d7cdb29932e8a43c2447803a67ed4414b94e Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Tue, 22 Mar 2022 16:33:56 +0100 Subject: [PATCH 12/19] formatting --- enhanced_enums/lib/complete_example.dart | 10 +++++----- enhanced_enums/lib/plain.dart | 6 ++---- enhanced_enums/lib/typed_enum.dart | 2 +- enhanced_enums/test/comparable_mixin_test.dart | 1 - enhanced_enums/test/comparable_test.dart | 1 - enhanced_enums/test/plain_test.dart | 1 - 6 files changed, 8 insertions(+), 13 deletions(-) diff --git a/enhanced_enums/lib/complete_example.dart b/enhanced_enums/lib/complete_example.dart index 007063e..5f3e518 100644 --- a/enhanced_enums/lib/complete_example.dart +++ b/enhanced_enums/lib/complete_example.dart @@ -2,9 +2,9 @@ // 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. -/// Complete example that showcases the different usecases for dart enums +/// Complete example that showcases the different usecases for dart enums /// in a real scenario. -/// +/// /// Enum that represents different types of vehicles. enum Vehicle with FlatTireMixin, Traveler implements Comparable { car(tires: 4, passengers: 5, carbonPerKilometer: 400), @@ -53,10 +53,10 @@ mixin FlatTireMixin { } /// Mixin that adds Enum specific functionality -/// -/// This mixin adds the [travel] method, that returns a String +/// +/// This mixin adds the [travel] method, that returns a String /// with the Enum name in it. -/// +/// /// This mixin can access the property [name] from the Enum. mixin Traveler on Enum { String travel() { diff --git a/enhanced_enums/lib/plain.dart b/enhanced_enums/lib/plain.dart index 5d2fc36..6a4ded0 100644 --- a/enhanced_enums/lib/plain.dart +++ b/enhanced_enums/lib/plain.dart @@ -3,8 +3,6 @@ // BSD-style license that can be found in the LICENSE file. /// Plain enum. -/// +/// /// This enum doesn't use any of enhancements. -enum Plain { - foo, bar, baz -} +enum Plain { foo, bar, baz } diff --git a/enhanced_enums/lib/typed_enum.dart b/enhanced_enums/lib/typed_enum.dart index 0ac986a..00da94c 100644 --- a/enhanced_enums/lib/typed_enum.dart +++ b/enhanced_enums/lib/typed_enum.dart @@ -3,7 +3,7 @@ // BSD-style license that can be found in the LICENSE file. /// Enum with a Type. -/// +/// /// The type [T] is used to define the type of [List] the enum contains. enum EnumWithType { numbers([1, 2, 3]), diff --git a/enhanced_enums/test/comparable_mixin_test.dart b/enhanced_enums/test/comparable_mixin_test.dart index 237462a..e74a088 100644 --- a/enhanced_enums/test/comparable_mixin_test.dart +++ b/enhanced_enums/test/comparable_mixin_test.dart @@ -5,7 +5,6 @@ import 'package:enhanced_enums/comparable_mixin.dart'; import 'package:test/test.dart'; - void main() { test('Sort enum using compareTo in mixin', () { // unsorted list diff --git a/enhanced_enums/test/comparable_test.dart b/enhanced_enums/test/comparable_test.dart index dcac770..bef9331 100644 --- a/enhanced_enums/test/comparable_test.dart +++ b/enhanced_enums/test/comparable_test.dart @@ -5,7 +5,6 @@ import 'package:enhanced_enums/comparable.dart'; import 'package:test/test.dart'; - void main() { test('Sort Quantity enum using compareTo', () { // unsorted list diff --git a/enhanced_enums/test/plain_test.dart b/enhanced_enums/test/plain_test.dart index 267a8b5..117d5f0 100644 --- a/enhanced_enums/test/plain_test.dart +++ b/enhanced_enums/test/plain_test.dart @@ -21,5 +21,4 @@ void main() { test('Get Plain enum values', () { expect(Plain.values, [Plain.foo, Plain.bar, Plain.baz]); }); - } From 114936177cf9267dce0d0741b51f47f9604f0f7e Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Tue, 22 Mar 2022 20:50:18 +0100 Subject: [PATCH 13/19] Update enhanced_enums/README.md Co-authored-by: John Ryan --- enhanced_enums/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/enhanced_enums/README.md b/enhanced_enums/README.md index 6c25c78..4a186f7 100644 --- a/enhanced_enums/README.md +++ b/enhanced_enums/README.md @@ -1,4 +1,4 @@ -# Enhancend enums samples +# Enhanced enums samples This a set of samples that demonstrates the enhanced enums syntax and shows some common use cases of the feature. From 911c339e38bc8f8e45bc151dafc4ac0ecf9076ea Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Tue, 22 Mar 2022 20:50:27 +0100 Subject: [PATCH 14/19] Update enhanced_enums/README.md Co-authored-by: John Ryan --- enhanced_enums/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/enhanced_enums/README.md b/enhanced_enums/README.md index 4a186f7..f25bf58 100644 --- a/enhanced_enums/README.md +++ b/enhanced_enums/README.md @@ -3,7 +3,7 @@ This a set of samples that demonstrates the enhanced enums syntax and shows some common use cases of the feature. -This feature was added in Dart 2.XX. The programs in this folder won't +This feature is part of Dart 2.17. The programs in this folder won't compile in earlier versions. ## Instructions From b20e5f32226671f22b0574fe04b937fd2069be74 Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Tue, 22 Mar 2022 20:50:45 +0100 Subject: [PATCH 15/19] Update enhanced_enums/lib/complete_example.dart Co-authored-by: John Ryan --- enhanced_enums/lib/complete_example.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/enhanced_enums/lib/complete_example.dart b/enhanced_enums/lib/complete_example.dart index 5f3e518..f24a15f 100644 --- a/enhanced_enums/lib/complete_example.dart +++ b/enhanced_enums/lib/complete_example.dart @@ -46,7 +46,7 @@ mixin FlatTireMixin { /// Number of tires getter, to be implemented by Enum. int get tires; - /// Calcultes the price to replace all tires. + /// Calculates the price to replace all tires. int costToReplaceTires({required int pricePerTire}) { return tires * pricePerTire + fee; } From 66820c143de127af7f853a603d21df6ad8878253 Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Tue, 22 Mar 2022 20:52:41 +0100 Subject: [PATCH 16/19] Update enhanced_enums/lib/typed_enum.dart Co-authored-by: John Ryan --- enhanced_enums/lib/typed_enum.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/enhanced_enums/lib/typed_enum.dart b/enhanced_enums/lib/typed_enum.dart index 00da94c..919f1f9 100644 --- a/enhanced_enums/lib/typed_enum.dart +++ b/enhanced_enums/lib/typed_enum.dart @@ -2,7 +2,7 @@ // 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. -/// Enum with a Type. +/// Enum with a generic type. /// /// The type [T] is used to define the type of [List] the enum contains. enum EnumWithType { From 5d054dbd49de54dccc3ac7d3730d0971baa5486e Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Tue, 22 Mar 2022 20:52:47 +0100 Subject: [PATCH 17/19] Update enhanced_enums/pubspec.yaml Co-authored-by: John Ryan --- enhanced_enums/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/enhanced_enums/pubspec.yaml b/enhanced_enums/pubspec.yaml index 229ec9a..19bf73f 100644 --- a/enhanced_enums/pubspec.yaml +++ b/enhanced_enums/pubspec.yaml @@ -1,5 +1,5 @@ name: enhanced_enums -description: A sample command-line application. +description: Samples that demonstrates the enhanced enums syntax # This example isn't intended for publishing on pub.dev. publish_to: none From fcd4edb36a19ef3a942facf26815727bd265bba8 Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Thu, 24 Mar 2022 14:40:25 +0100 Subject: [PATCH 18/19] rename comparable.dart example to match comparable_mixin.dart --- enhanced_enums/lib/comparable.dart | 6 +++--- enhanced_enums/test/comparable_test.dart | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/enhanced_enums/lib/comparable.dart b/enhanced_enums/lib/comparable.dart index f9b73bc..4f87675 100644 --- a/enhanced_enums/lib/comparable.dart +++ b/enhanced_enums/lib/comparable.dart @@ -3,15 +3,15 @@ // BSD-style license that can be found in the LICENSE file. /// Enum that implements a Comparable -enum Quantity implements Comparable { +enum Ordering implements Comparable { zero(0), one(1), many(99); final int quantity; - const Quantity(this.quantity); + const Ordering(this.quantity); @override - int compareTo(Quantity other) => quantity - other.quantity; + int compareTo(Ordering other) => quantity - other.quantity; } diff --git a/enhanced_enums/test/comparable_test.dart b/enhanced_enums/test/comparable_test.dart index bef9331..bc0d80c 100644 --- a/enhanced_enums/test/comparable_test.dart +++ b/enhanced_enums/test/comparable_test.dart @@ -8,12 +8,12 @@ import 'package:test/test.dart'; void main() { test('Sort Quantity enum using compareTo', () { // unsorted list - final list = [Quantity.many, Quantity.zero, Quantity.one]; + final list = [Ordering.many, Ordering.zero, Ordering.one]; // sort using compareTo list.sort(); // list is sorted by amount - expect(list, [Quantity.zero, Quantity.one, Quantity.many]); + expect(list, [Ordering.zero, Ordering.one, Ordering.many]); }); } From 9811c2cfd94a90d309ce4eb7f3c67dd73558204f Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Thu, 24 Mar 2022 14:41:21 +0100 Subject: [PATCH 19/19] typo --- enhanced_enums/lib/complete_example.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/enhanced_enums/lib/complete_example.dart b/enhanced_enums/lib/complete_example.dart index f24a15f..4650dc8 100644 --- a/enhanced_enums/lib/complete_example.dart +++ b/enhanced_enums/lib/complete_example.dart @@ -2,7 +2,7 @@ // 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. -/// Complete example that showcases the different usecases for dart enums +/// Complete example that showcases the different use cases for dart enums /// in a real scenario. /// /// Enum that represents different types of vehicles.