Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(362)

Side by Side Diff: tests/lib/mirrors/symbol_validation_test.dart

Issue 140643006: Update documentation on Symbol. Make validation match. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Allow qualified names Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sdk/lib/internal/symbol.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library symbol_validation_test; 5 library symbol_validation_test;
6 6
7 import 'dart:mirrors'; 7 import 'dart:mirrors';
8 import 'package:expect/expect.dart'; 8 import 'package:expect/expect.dart';
9 9
10 validSymbol(String string) { 10 validSymbol(String string) {
11 Expect.equals(string, 11 Expect.equals(string,
12 MirrorSystem.getName(new Symbol(string)), 12 MirrorSystem.getName(new Symbol(string)),
13 'Valid symbol "$string" should be invertable'); 13 'Valid symbol "$string" should be invertable');
14 Expect.equals(string, 14 Expect.equals(string,
15 MirrorSystem.getName(MirrorSystem.getSymbol(string)), 15 MirrorSystem.getName(MirrorSystem.getSymbol(string)),
16 'Valid symbol "$string" should be invertable'); 16 'Valid symbol "$string" should be invertable');
17 } 17 }
18 18
19 invalidSymbol(String string) { 19 invalidSymbol(String string) {
20 Expect.throws(() => new Symbol(string), 20 Expect.throws(() => new Symbol(string),
21 (e) => e is ArgumentError, 21 (e) => e is ArgumentError,
22 'Invalid symbol "$string" should be rejected'); 22 'Invalid symbol "$string" should be rejected');
23 Expect.throws(() => MirrorSystem.getSymbol(string), 23 Expect.throws(() => MirrorSystem.getSymbol(string),
24 (e) => e is ArgumentError, 24 (e) => e is ArgumentError,
25 'Invalid symbol "$string" should be rejected'); 25 'Invalid symbol "$string" should be rejected');
26 } 26 }
27 27
28 main() { 28 main() {
29 ['%', '&', '*', '+', '-', '/', '<', '<<', '<=', '==', '>', 29 // Operators that can be declared as class member operators.
30 '>=', '>>', '[]', '[]=', '^', 'unary-', '|', '~', '~/'] 30 // These are all valid as symbols.
31 .forEach(validSymbol); 31 var operators = [
32 '%', '&', '*', '+', '-', '/', '<', '<<', '<=', '==', '>',
33 '>=', '>>', '[]', '[]=', '^', 'unary-', '|', '~', '~/'
34 ];
35 operator.expand((op) => [op, "x.op"]).forEach(validSymbol);
ahe 2014/02/21 12:09:28 x.$op
36 operator.expand((op) => [".$op", "$op.x", "x$op", "_x.$op"])
37 .forEach(invalidSymbol);
38 operator.expand((op) => operators.contains("$op=") ? [] : ["x.$op=", "$op="])
39 .forEach(invalidSymbol);
32 40
33 ['foo', '_bar', 'baz.quz', 'fisk1', 'hest2fisk', 'a.b.c.d.e', 41 var simpleSymbols = [
34 '\$', 'foo\$', 'bar\$bar'] 42 'foo', '_bar', 'baz.quz', 'fisk1', 'hest2fisk', 'a.b.c.d.e',
35 .forEach(validSymbol); 43 r'$', r'foo$', r'bar$bar', r'$.$', r'x6$_', r'$6_', r'x.$$6_',
44 'x_', 'x_.x_',
45 ];
46 simpleSymbols.expand((s) => [s, "s="]).forEach(validSymbol);
36 47
37 ['6', '0foo', ',', 'S with M', '_invalid&private'] 48 var nonSymbols = [
38 .forEach(invalidSymbol); 49 // Non-identifiers.
50 '6', '0foo', ',', 'S with M', '_invalid&private', "#foo", " foo", "foo ",
51 // Operator variants.
52 '+=', '()', 'operator+', 'unary+', '>>>', "&&", "||", "!", "@", "#", "[",
53 // Privat symbols.
54 '_', '_x', 'x._y', 'x._',
55 // Empty parts of "qualified" symbols.
56 '.', 'x.', '.x', 'x..y'
57 ];
58 nonSymbols.forEach(invalidSymbol);
59
60 // Reserved words are not valid identifiers and therefore not valid symbols.
61 var reservedWords = [
62 "assert",
63 "break",
64 "case",
65 "catch",
66 "class",
67 "const",
68 "continue",
69 "default",
70 "do",
71 "else",
72 "enum",
73 "extends",
74 "false",
75 "final",
76 "finally",
77 "for",
78 "if",
79 "in",
80 "is",
81 "new",
82 "null",
83 "rethrow",
84 "return",
85 "super",
86 "switch",
87 "this",
88 "throw",
89 "true",
90 "try",
91 "var",
92 "void",
93 "while",
94 "with"
95 ];
96 reservedWords.expand((w) => [w, "$w=", "x.$w" , "$w.x", "x.$w.x"])
97 .forEach(invalidSymbol);
98
99 // Built-in identifiers are valid identifiers that are restricted from being
100 // used in some cases, but they are all valid symbols.
101 var builtInIdentifiers = [
102 "abstract",
103 "as",
104 "dynamic",
105 "export",
106 "external",
107 "factory",
108 "get",
109 "implements",
110 "import",
111 "library",
112 "operator",
113 "part",
114 "set",
115 "static",
116 "typedef"
117 ];
118 builtInIdentifiers.expand((w) => [w, "$w=", "x.$w" , "$w.x", "x.$w.x",
119 "$w=", "x.$w="])
120 .forEach(validSymbol);
39 } 121 }
OLDNEW
« no previous file with comments | « sdk/lib/internal/symbol.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698