Skip to content

Commit 957096a

Browse files
mejorar version
1 parent 7f857e9 commit 957096a

File tree

2 files changed

+136
-0
lines changed

2 files changed

+136
-0
lines changed

lib/dynamic/pattern.dart

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
2+
// root element
3+
abstract class Element {
4+
String get();
5+
}
6+
7+
8+
// html element
9+
abstract class HtmlElement extends Element {
10+
11+
}
12+
13+
final class Div extends HtmlElement {
14+
String get() {
15+
return "";
16+
}
17+
}
18+
19+
final class Span extends HtmlElement {
20+
String get() {
21+
return "";
22+
}
23+
}
24+
25+
final class Paragraph extends HtmlElement {
26+
String get() {
27+
return "";
28+
}
29+
}
30+
31+
final class Image extends HtmlElement {
32+
String get() {
33+
return "";
34+
}
35+
}
36+
37+
38+
// internal element
39+
abstract class InternalElement extends Element {
40+
41+
}
42+
43+
final class Text extends InternalElement {
44+
String get() {
45+
return "";
46+
}
47+
}
48+
49+
final class HtmlLiteral extends InternalElement {
50+
String get() {
51+
return "";
52+
}
53+
}
54+
55+
final class Nothing extends InternalElement {
56+
String get() {
57+
return "";
58+
}
59+
}
60+
61+
62+
// custom element
63+
abstract class CustomElement extends Element {
64+
65+
}
66+
67+
68+
69+
String getElement(Element element) {
70+
return switch (element) {
71+
HtmlElement html => switch (html) {
72+
Div div => '<div>' + div.get() + '</div>',
73+
Span span => '<span>' + span.get() + '</span>',
74+
Paragraph paragraph => '<p>' + paragraph.get() + '</p>',
75+
Image image => '<img src="' + image.get() + '" />',
76+
_ => throw UnimplementedError(),
77+
},
78+
InternalElement internal => switch (internal) {
79+
Text text => text.get(),
80+
HtmlLiteral htmlLiteral => htmlLiteral.get(),
81+
Nothing nothing => nothing.get(),
82+
_ => throw UnimplementedError(),
83+
},
84+
CustomElement custom => custom.toString(),
85+
_ => throw UnimplementedError(),
86+
};
87+
}

test/dynamic/pattern_test.dart

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import 'package:dart_algorithm_example/dynamic/pattern.dart';
2+
import 'package:test/test.dart';
3+
4+
void main() {
5+
//unit test
6+
test('pattern()', () {
7+
final element = Div();
8+
9+
print('-- Pattern -- \n\n');
10+
11+
if (element is Div) {
12+
print('div');
13+
}
14+
15+
if (element is HtmlElement) {
16+
print('html element');
17+
}
18+
19+
if (element is Element) {
20+
print('element');
21+
}
22+
23+
print(getElement(element) + '\n\n');
24+
25+
print('Test Passed!');
26+
});
27+
28+
test('pattern2()', () {
29+
final Object value = 'maria';
30+
31+
print('-- Pattern 2 -- \n\n');
32+
33+
if (value is String) {
34+
print(value.toUpperCase());
35+
}
36+
37+
if (value is int) {
38+
print(value.round());
39+
}
40+
41+
if (value is double) {
42+
print(value.ceil());
43+
}
44+
45+
print('\n\n');
46+
47+
print('Test Passed!');
48+
});
49+
}

0 commit comments

Comments
 (0)