presently 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/presently +13 -0
- data/lib/presently/application.rb +104 -0
- data/lib/presently/clock.rb +77 -0
- data/lib/presently/display_view.rb +73 -0
- data/lib/presently/environment/application.rb +62 -0
- data/lib/presently/page.rb +38 -0
- data/lib/presently/page.xrb +31 -0
- data/lib/presently/presentation.rb +72 -0
- data/lib/presently/presentation_controller.rb +181 -0
- data/lib/presently/presenter_view.rb +264 -0
- data/lib/presently/slide.rb +148 -0
- data/lib/presently/slide_view.rb +92 -0
- data/lib/presently/state.rb +66 -0
- data/lib/presently/version.rb +9 -0
- data/lib/presently.rb +9 -0
- data/license.md +21 -0
- data/public/_components/@socketry/syntax/Syntax/CodeElement.js +337 -0
- data/public/_components/@socketry/syntax/Syntax/Errors.js +52 -0
- data/public/_components/@socketry/syntax/Syntax/Language/apache.js +49 -0
- data/public/_components/@socketry/syntax/Syntax/Language/applescript.js +157 -0
- data/public/_components/@socketry/syntax/Syntax/Language/assembly.js +42 -0
- data/public/_components/@socketry/syntax/Syntax/Language/bash-script.js +108 -0
- data/public/_components/@socketry/syntax/Syntax/Language/bash.js +32 -0
- data/public/_components/@socketry/syntax/Syntax/Language/basic.js +232 -0
- data/public/_components/@socketry/syntax/Syntax/Language/c++.js +1 -0
- data/public/_components/@socketry/syntax/Syntax/Language/c.js +1 -0
- data/public/_components/@socketry/syntax/Syntax/Language/clang.js +201 -0
- data/public/_components/@socketry/syntax/Syntax/Language/cpp.js +1 -0
- data/public/_components/@socketry/syntax/Syntax/Language/csharp.js +166 -0
- data/public/_components/@socketry/syntax/Syntax/Language/css.js +244 -0
- data/public/_components/@socketry/syntax/Syntax/Language/diff.js +24 -0
- data/public/_components/@socketry/syntax/Syntax/Language/go.js +135 -0
- data/public/_components/@socketry/syntax/Syntax/Language/haskell.js +110 -0
- data/public/_components/@socketry/syntax/Syntax/Language/html.js +69 -0
- data/public/_components/@socketry/syntax/Syntax/Language/io.js +68 -0
- data/public/_components/@socketry/syntax/Syntax/Language/java.js +134 -0
- data/public/_components/@socketry/syntax/Syntax/Language/javascript.js +89 -0
- data/public/_components/@socketry/syntax/Syntax/Language/json.js +36 -0
- data/public/_components/@socketry/syntax/Syntax/Language/lisp.js +38 -0
- data/public/_components/@socketry/syntax/Syntax/Language/lua.js +87 -0
- data/public/_components/@socketry/syntax/Syntax/Language/markdown.js +112 -0
- data/public/_components/@socketry/syntax/Syntax/Language/nginx.js +37 -0
- data/public/_components/@socketry/syntax/Syntax/Language/objective-c.js +1 -0
- data/public/_components/@socketry/syntax/Syntax/Language/ocaml.js +225 -0
- data/public/_components/@socketry/syntax/Syntax/Language/pascal.js +166 -0
- data/public/_components/@socketry/syntax/Syntax/Language/patch.js +2 -0
- data/public/_components/@socketry/syntax/Syntax/Language/perl5.js +317 -0
- data/public/_components/@socketry/syntax/Syntax/Language/php-script.js +112 -0
- data/public/_components/@socketry/syntax/Syntax/Language/php.js +18 -0
- data/public/_components/@socketry/syntax/Syntax/Language/plain.js +20 -0
- data/public/_components/@socketry/syntax/Syntax/Language/protobuf.js +77 -0
- data/public/_components/@socketry/syntax/Syntax/Language/python.js +208 -0
- data/public/_components/@socketry/syntax/Syntax/Language/ruby.js +124 -0
- data/public/_components/@socketry/syntax/Syntax/Language/scala.js +81 -0
- data/public/_components/@socketry/syntax/Syntax/Language/smalltalk.js +30 -0
- data/public/_components/@socketry/syntax/Syntax/Language/sql.js +865 -0
- data/public/_components/@socketry/syntax/Syntax/Language/super-collider.js +70 -0
- data/public/_components/@socketry/syntax/Syntax/Language/swift.js +176 -0
- data/public/_components/@socketry/syntax/Syntax/Language/xml.js +76 -0
- data/public/_components/@socketry/syntax/Syntax/Language/xrb.js +33 -0
- data/public/_components/@socketry/syntax/Syntax/Language/yaml.js +29 -0
- data/public/_components/@socketry/syntax/Syntax/Language.js +276 -0
- data/public/_components/@socketry/syntax/Syntax/Loader.js +78 -0
- data/public/_components/@socketry/syntax/Syntax/Match.js +546 -0
- data/public/_components/@socketry/syntax/Syntax/Rule.js +306 -0
- data/public/_components/@socketry/syntax/Syntax.js +356 -0
- data/public/_components/@socketry/syntax/bin/syntax-ast.js +42 -0
- data/public/_components/@socketry/syntax/examples/_template.html +53 -0
- data/public/_components/@socketry/syntax/examples/apache.html +72 -0
- data/public/_components/@socketry/syntax/examples/applescript.html +72 -0
- data/public/_components/@socketry/syntax/examples/assembly.html +74 -0
- data/public/_components/@socketry/syntax/examples/bash.html +90 -0
- data/public/_components/@socketry/syntax/examples/basic.html +87 -0
- data/public/_components/@socketry/syntax/examples/c.html +141 -0
- data/public/_components/@socketry/syntax/examples/clang.html +202 -0
- data/public/_components/@socketry/syntax/examples/csharp.html +110 -0
- data/public/_components/@socketry/syntax/examples/css-colors.html +179 -0
- data/public/_components/@socketry/syntax/examples/custom-theme.html +155 -0
- data/public/_components/@socketry/syntax/examples/diff.html +142 -0
- data/public/_components/@socketry/syntax/examples/examples.css +216 -0
- data/public/_components/@socketry/syntax/examples/go.html +413 -0
- data/public/_components/@socketry/syntax/examples/haskell.html +373 -0
- data/public/_components/@socketry/syntax/examples/html.html +316 -0
- data/public/_components/@socketry/syntax/examples/index.html +97 -0
- data/public/_components/@socketry/syntax/examples/io.html +552 -0
- data/public/_components/@socketry/syntax/examples/java.html +786 -0
- data/public/_components/@socketry/syntax/examples/javascript.html +199 -0
- data/public/_components/@socketry/syntax/examples/json.html +150 -0
- data/public/_components/@socketry/syntax/examples/lisp.html +476 -0
- data/public/_components/@socketry/syntax/examples/lua.html +737 -0
- data/public/_components/@socketry/syntax/examples/markdown.html +121 -0
- data/public/_components/@socketry/syntax/examples/mixed.html +306 -0
- data/public/_components/@socketry/syntax/examples/nginx.html +554 -0
- data/public/_components/@socketry/syntax/examples/ocaml.html +596 -0
- data/public/_components/@socketry/syntax/examples/pascal.html +762 -0
- data/public/_components/@socketry/syntax/examples/perl5.html +488 -0
- data/public/_components/@socketry/syntax/examples/php-script.html +142 -0
- data/public/_components/@socketry/syntax/examples/php.html +95 -0
- data/public/_components/@socketry/syntax/examples/plain.html +222 -0
- data/public/_components/@socketry/syntax/examples/protobuf.html +405 -0
- data/public/_components/@socketry/syntax/examples/python.html +82 -0
- data/public/_components/@socketry/syntax/examples/readme.md +79 -0
- data/public/_components/@socketry/syntax/examples/ruby.html +58 -0
- data/public/_components/@socketry/syntax/examples/scala.html +41 -0
- data/public/_components/@socketry/syntax/examples/smalltalk.html +436 -0
- data/public/_components/@socketry/syntax/examples/sql.html +373 -0
- data/public/_components/@socketry/syntax/examples/super-collider.html +55 -0
- data/public/_components/@socketry/syntax/examples/swift.html +176 -0
- data/public/_components/@socketry/syntax/examples/wrap-demo.html +103 -0
- data/public/_components/@socketry/syntax/examples/xml.html +112 -0
- data/public/_components/@socketry/syntax/examples/xrb.html +37 -0
- data/public/_components/@socketry/syntax/examples/yaml.html +72 -0
- data/public/_components/@socketry/syntax/license.md +21 -0
- data/public/_components/@socketry/syntax/package-lock.json +834 -0
- data/public/_components/@socketry/syntax/package.json +43 -0
- data/public/_components/@socketry/syntax/readme.md +162 -0
- data/public/_components/@socketry/syntax/test/Syntax/CodeElement.js +306 -0
- data/public/_components/@socketry/syntax/test/Syntax/ErrorHandling.js +85 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/apache.js +153 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/applescript.js +198 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/assembly.js +209 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/bash-script.js +225 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/bash.js +162 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/basic.js +265 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/clang.js +390 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/csharp.js +436 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/css.js +431 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/diff.js +206 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/go.js +386 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/haskell.js +454 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/html.js +111 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/io.js +229 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/java.js +362 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/javascript.js +101 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/json.js +101 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/lisp.js +224 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/lua.js +307 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/markdown.js +163 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/nginx.js +267 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/ocaml.js +299 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/pascal.js +311 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/perl5.js +333 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/php-script.js +197 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/php.js +92 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/plain.js +327 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/protobuf.js +294 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/python.js +213 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/ruby.js +70 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/scala.js +75 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/smalltalk.js +223 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/sql.js +281 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/super-collider.js +66 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/swift.js +71 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/xml.js +170 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/xrb.js +57 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/yaml.js +123 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language.js +62 -0
- data/public/_components/@socketry/syntax/test/Syntax/Match.js +40 -0
- data/public/_components/@socketry/syntax/test/Syntax/Rule.js +251 -0
- data/public/_components/@socketry/syntax/test/Syntax.js +38 -0
- data/public/_components/@socketry/syntax/test/helpers/ast-matcher.js +90 -0
- data/public/_components/@socketry/syntax/themes/base/apache.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/applescript.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/assembly.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/bash.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/basic.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/c.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/clang.css +0 -0
- data/public/_components/@socketry/syntax/themes/base/csharp.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/css.css +22 -0
- data/public/_components/@socketry/syntax/themes/base/diff.css +48 -0
- data/public/_components/@socketry/syntax/themes/base/go.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/haskell.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/html.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/io.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/java.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/javascript.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/json.css +41 -0
- data/public/_components/@socketry/syntax/themes/base/lisp.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/lua.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/markdown.css +16 -0
- data/public/_components/@socketry/syntax/themes/base/nginx.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/ocaml.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/pascal.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/perl5.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/php-script.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/php.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/plain.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/protobuf.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/python.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/ruby.css +23 -0
- data/public/_components/@socketry/syntax/themes/base/scala.css +3 -0
- data/public/_components/@socketry/syntax/themes/base/smalltalk.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/sql.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/super-collider.css +33 -0
- data/public/_components/@socketry/syntax/themes/base/swift.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/syntax.css +63 -0
- data/public/_components/@socketry/syntax/themes/base/xml.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/xrb.css +29 -0
- data/public/_components/@socketry/syntax/themes/base/yaml.css +1 -0
- data/public/_components/@socketry/syntax/themes/theming.md +233 -0
- data/public/_components/@socketry/syntax/update-examples.js +135 -0
- data/public/_static/index.css +593 -0
- data/public/application.js +147 -0
- data/readme.md +69 -0
- data/releases.md +3 -0
- data/templates/code.xrb +12 -0
- data/templates/default.xrb +5 -0
- data/templates/image.xrb +8 -0
- data/templates/section.xrb +5 -0
- data/templates/title.xrb +8 -0
- data/templates/translation.xrb +8 -0
- data/templates/two_column.xrb +8 -0
- metadata +280 -0
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for C# language definition
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {test} from 'node:test';
|
|
6
|
+
import assert from 'node:assert';
|
|
7
|
+
|
|
8
|
+
import Syntax from '../../../Syntax.js';
|
|
9
|
+
import register from '../../../Syntax/Language/csharp.js';
|
|
10
|
+
|
|
11
|
+
test('C# language can be registered', async () => {
|
|
12
|
+
const syntax = new Syntax();
|
|
13
|
+
register(syntax);
|
|
14
|
+
const language = await syntax.getLanguage('csharp');
|
|
15
|
+
assert.ok(language);
|
|
16
|
+
assert.strictEqual(language.name, 'csharp');
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test('C# can be registered with c-sharp alias', async () => {
|
|
20
|
+
const syntax = new Syntax();
|
|
21
|
+
register(syntax);
|
|
22
|
+
const language = await syntax.getLanguage('c-sharp');
|
|
23
|
+
assert.ok(language);
|
|
24
|
+
assert.strictEqual(language.name, 'csharp');
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test('C# can be registered with c# alias', async () => {
|
|
28
|
+
const syntax = new Syntax();
|
|
29
|
+
register(syntax);
|
|
30
|
+
const language = await syntax.getLanguage('c#');
|
|
31
|
+
assert.ok(language);
|
|
32
|
+
assert.strictEqual(language.name, 'csharp');
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
test('C# can highlight keywords', async () => {
|
|
36
|
+
const syntax = new Syntax();
|
|
37
|
+
register(syntax);
|
|
38
|
+
const language = await syntax.getLanguage('csharp');
|
|
39
|
+
|
|
40
|
+
const code =
|
|
41
|
+
'public class MyClass {\n public void Method() {\n if (x > 0) {\n return;\n }\n }\n}';
|
|
42
|
+
const matches = await language.getMatches(syntax, code);
|
|
43
|
+
|
|
44
|
+
const keywords = matches.filter(m => m.type === 'keyword');
|
|
45
|
+
assert.ok(keywords.length > 0);
|
|
46
|
+
assert.ok(keywords.some(m => m.value === 'class'));
|
|
47
|
+
assert.ok(keywords.some(m => m.value === 'if'));
|
|
48
|
+
assert.ok(keywords.some(m => m.value === 'return'));
|
|
49
|
+
|
|
50
|
+
// void is a type, not a keyword
|
|
51
|
+
const types = matches.filter(m => m.type === 'type');
|
|
52
|
+
assert.ok(types.some(m => m.value === 'void'));
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
test('C# can highlight access modifiers', async () => {
|
|
56
|
+
const syntax = new Syntax();
|
|
57
|
+
register(syntax);
|
|
58
|
+
const language = await syntax.getLanguage('csharp');
|
|
59
|
+
|
|
60
|
+
const code =
|
|
61
|
+
'public class MyClass {\n private int x;\n protected string y;\n internal double z;\n}';
|
|
62
|
+
const matches = await language.getMatches(syntax, code);
|
|
63
|
+
|
|
64
|
+
const access = matches.filter(m => m.type === 'access');
|
|
65
|
+
assert.ok(access.some(m => m.value === 'public'));
|
|
66
|
+
assert.ok(access.some(m => m.value === 'private'));
|
|
67
|
+
assert.ok(access.some(m => m.value === 'protected'));
|
|
68
|
+
assert.ok(access.some(m => m.value === 'internal'));
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
test('C# can highlight types', async () => {
|
|
72
|
+
const syntax = new Syntax();
|
|
73
|
+
register(syntax);
|
|
74
|
+
const language = await syntax.getLanguage('csharp');
|
|
75
|
+
|
|
76
|
+
const code = 'int x;\nstring y;\nbool flag;\ndouble d;\nfloat f;';
|
|
77
|
+
const matches = await language.getMatches(syntax, code);
|
|
78
|
+
|
|
79
|
+
const types = matches.filter(m => m.type === 'type');
|
|
80
|
+
assert.ok(types.some(m => m.value === 'int'));
|
|
81
|
+
assert.ok(types.some(m => m.value === 'string'));
|
|
82
|
+
assert.ok(types.some(m => m.value === 'bool'));
|
|
83
|
+
assert.ok(types.some(m => m.value === 'double'));
|
|
84
|
+
assert.ok(types.some(m => m.value === 'float'));
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
test('C# can highlight constants', async () => {
|
|
88
|
+
const syntax = new Syntax();
|
|
89
|
+
register(syntax);
|
|
90
|
+
const language = await syntax.getLanguage('csharp');
|
|
91
|
+
|
|
92
|
+
const code =
|
|
93
|
+
'if (obj == null) return false;\nbool flag = true;\nvar x = this;';
|
|
94
|
+
const matches = await language.getMatches(syntax, code);
|
|
95
|
+
|
|
96
|
+
const constants = matches.filter(m => m.type === 'constant');
|
|
97
|
+
assert.ok(constants.some(m => m.value === 'null'));
|
|
98
|
+
assert.ok(constants.some(m => m.value === 'true'));
|
|
99
|
+
assert.ok(constants.some(m => m.value === 'false'));
|
|
100
|
+
assert.ok(constants.some(m => m.value === 'this'));
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
test('C# can highlight operators', async () => {
|
|
104
|
+
const syntax = new Syntax();
|
|
105
|
+
register(syntax);
|
|
106
|
+
const language = await syntax.getLanguage('csharp');
|
|
107
|
+
|
|
108
|
+
const code = 'int result = a + b * c - d / e % f;';
|
|
109
|
+
const matches = await language.getMatches(syntax, code);
|
|
110
|
+
|
|
111
|
+
const operators = matches.filter(m => m.type === 'operator');
|
|
112
|
+
assert.ok(operators.some(m => m.value === '+'));
|
|
113
|
+
assert.ok(operators.some(m => m.value === '*'));
|
|
114
|
+
assert.ok(operators.some(m => m.value === '-'));
|
|
115
|
+
assert.ok(operators.some(m => m.value === '/'));
|
|
116
|
+
assert.ok(operators.some(m => m.value === '%'));
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
test('C# can highlight logical operators', async () => {
|
|
120
|
+
const syntax = new Syntax();
|
|
121
|
+
register(syntax);
|
|
122
|
+
const language = await syntax.getLanguage('csharp');
|
|
123
|
+
|
|
124
|
+
const code = 'if (a && b || !c) { }';
|
|
125
|
+
const matches = await language.getMatches(syntax, code);
|
|
126
|
+
|
|
127
|
+
const operators = matches.filter(m => m.type === 'operator');
|
|
128
|
+
assert.ok(operators.length > 0);
|
|
129
|
+
// Note: && and || might be matched as separate & and | operators
|
|
130
|
+
assert.ok(operators.some(m => m.value === '!'));
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
test('C# can highlight var keyword', async () => {
|
|
134
|
+
const syntax = new Syntax();
|
|
135
|
+
register(syntax);
|
|
136
|
+
const language = await syntax.getLanguage('csharp');
|
|
137
|
+
|
|
138
|
+
const code = 'var x = 5;';
|
|
139
|
+
const matches = await language.getMatches(syntax, code);
|
|
140
|
+
|
|
141
|
+
const keywords = matches.filter(m => m.type === 'keyword');
|
|
142
|
+
assert.ok(keywords.some(m => m.value === 'var'));
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
test('C# can highlight LINQ keywords', async () => {
|
|
146
|
+
const syntax = new Syntax();
|
|
147
|
+
register(syntax);
|
|
148
|
+
const language = await syntax.getLanguage('csharp');
|
|
149
|
+
|
|
150
|
+
const code = 'var result = from x in items where x > 0 select x;';
|
|
151
|
+
const matches = await language.getMatches(syntax, code);
|
|
152
|
+
|
|
153
|
+
const keywords = matches.filter(m => m.type === 'keyword');
|
|
154
|
+
assert.ok(keywords.some(m => m.value === 'from'));
|
|
155
|
+
assert.ok(keywords.some(m => m.value === 'in'));
|
|
156
|
+
assert.ok(keywords.some(m => m.value === 'where'));
|
|
157
|
+
assert.ok(keywords.some(m => m.value === 'select'));
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
test('C# can highlight async/await keywords', async () => {
|
|
161
|
+
const syntax = new Syntax();
|
|
162
|
+
register(syntax);
|
|
163
|
+
const language = await syntax.getLanguage('csharp');
|
|
164
|
+
|
|
165
|
+
const code = 'async Task MethodAsync() { }';
|
|
166
|
+
const matches = await language.getMatches(syntax, code);
|
|
167
|
+
|
|
168
|
+
// 'async' and 'await' might not be in the keyword list, but let's test what we have
|
|
169
|
+
assert.ok(matches.length > 0);
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
test('C# can highlight delegate keyword', async () => {
|
|
173
|
+
const syntax = new Syntax();
|
|
174
|
+
register(syntax);
|
|
175
|
+
const language = await syntax.getLanguage('csharp');
|
|
176
|
+
|
|
177
|
+
const code = 'public delegate void MyDelegate();';
|
|
178
|
+
const matches = await language.getMatches(syntax, code);
|
|
179
|
+
|
|
180
|
+
const keywords = matches.filter(m => m.type === 'keyword');
|
|
181
|
+
assert.ok(keywords.some(m => m.value === 'delegate'));
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
test('C# can highlight event keyword', async () => {
|
|
185
|
+
const syntax = new Syntax();
|
|
186
|
+
register(syntax);
|
|
187
|
+
const language = await syntax.getLanguage('csharp');
|
|
188
|
+
|
|
189
|
+
const code = 'public event EventHandler MyEvent;';
|
|
190
|
+
const matches = await language.getMatches(syntax, code);
|
|
191
|
+
|
|
192
|
+
const keywords = matches.filter(m => m.type === 'keyword');
|
|
193
|
+
assert.ok(keywords.some(m => m.value === 'event'));
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
test('C# can highlight foreach loops', async () => {
|
|
197
|
+
const syntax = new Syntax();
|
|
198
|
+
register(syntax);
|
|
199
|
+
const language = await syntax.getLanguage('csharp');
|
|
200
|
+
|
|
201
|
+
const code = 'foreach (var item in items) { }';
|
|
202
|
+
const matches = await language.getMatches(syntax, code);
|
|
203
|
+
|
|
204
|
+
const keywords = matches.filter(m => m.type === 'keyword');
|
|
205
|
+
assert.ok(keywords.some(m => m.value === 'foreach'));
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
test('C# can highlight using statements', async () => {
|
|
209
|
+
const syntax = new Syntax();
|
|
210
|
+
register(syntax);
|
|
211
|
+
const language = await syntax.getLanguage('csharp');
|
|
212
|
+
|
|
213
|
+
const code = 'using System;\nusing (var stream = new FileStream()) { }';
|
|
214
|
+
const matches = await language.getMatches(syntax, code);
|
|
215
|
+
|
|
216
|
+
const keywords = matches.filter(m => m.type === 'keyword');
|
|
217
|
+
assert.ok(keywords.some(m => m.value === 'using'));
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
test('C# can highlight namespace declarations', async () => {
|
|
221
|
+
const syntax = new Syntax();
|
|
222
|
+
register(syntax);
|
|
223
|
+
const language = await syntax.getLanguage('csharp');
|
|
224
|
+
|
|
225
|
+
const code = 'namespace MyNamespace { }';
|
|
226
|
+
const matches = await language.getMatches(syntax, code);
|
|
227
|
+
|
|
228
|
+
const keywords = matches.filter(m => m.type === 'keyword');
|
|
229
|
+
assert.ok(keywords.some(m => m.value === 'namespace'));
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
test('C# can highlight interface declarations', async () => {
|
|
233
|
+
const syntax = new Syntax();
|
|
234
|
+
register(syntax);
|
|
235
|
+
const language = await syntax.getLanguage('csharp');
|
|
236
|
+
|
|
237
|
+
const code = 'public interface IMyInterface { }';
|
|
238
|
+
const matches = await language.getMatches(syntax, code);
|
|
239
|
+
|
|
240
|
+
const keywords = matches.filter(m => m.type === 'keyword');
|
|
241
|
+
assert.ok(keywords.some(m => m.value === 'interface'));
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
test('C# can highlight struct declarations', async () => {
|
|
245
|
+
const syntax = new Syntax();
|
|
246
|
+
register(syntax);
|
|
247
|
+
const language = await syntax.getLanguage('csharp');
|
|
248
|
+
|
|
249
|
+
const code = 'public struct Point { public int X; public int Y; }';
|
|
250
|
+
const matches = await language.getMatches(syntax, code);
|
|
251
|
+
|
|
252
|
+
const keywords = matches.filter(m => m.type === 'keyword');
|
|
253
|
+
assert.ok(keywords.some(m => m.value === 'struct'));
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
test('C# can highlight enum declarations', async () => {
|
|
257
|
+
const syntax = new Syntax();
|
|
258
|
+
register(syntax);
|
|
259
|
+
const language = await syntax.getLanguage('csharp');
|
|
260
|
+
|
|
261
|
+
const code = 'public enum Color { Red, Green, Blue }';
|
|
262
|
+
const matches = await language.getMatches(syntax, code);
|
|
263
|
+
|
|
264
|
+
const keywords = matches.filter(m => m.type === 'keyword');
|
|
265
|
+
assert.ok(keywords.some(m => m.value === 'enum'));
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
test('C# can highlight C-style comments', async () => {
|
|
269
|
+
const syntax = new Syntax();
|
|
270
|
+
register(syntax);
|
|
271
|
+
const language = await syntax.getLanguage('csharp');
|
|
272
|
+
|
|
273
|
+
const code = '/* This is a comment */\nint x;';
|
|
274
|
+
const matches = await language.getMatches(syntax, code);
|
|
275
|
+
|
|
276
|
+
const comment = matches.find(m => m.type === 'comment');
|
|
277
|
+
assert.ok(comment);
|
|
278
|
+
assert.ok(comment.value.includes('This is a comment'));
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
test('C# can highlight C++-style comments', async () => {
|
|
282
|
+
const syntax = new Syntax();
|
|
283
|
+
register(syntax);
|
|
284
|
+
const language = await syntax.getLanguage('csharp');
|
|
285
|
+
|
|
286
|
+
const code = '// This is a comment\nint x;';
|
|
287
|
+
const matches = await language.getMatches(syntax, code);
|
|
288
|
+
|
|
289
|
+
const comment = matches.find(m => m.type === 'comment');
|
|
290
|
+
assert.ok(comment);
|
|
291
|
+
assert.ok(comment.value.includes('This is a comment'));
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
test('C# can highlight double-quoted strings', async () => {
|
|
295
|
+
const syntax = new Syntax();
|
|
296
|
+
register(syntax);
|
|
297
|
+
const language = await syntax.getLanguage('csharp');
|
|
298
|
+
|
|
299
|
+
const code = 'string msg = "Hello World";';
|
|
300
|
+
const matches = await language.getMatches(syntax, code);
|
|
301
|
+
|
|
302
|
+
const string = matches.find(m => m.type === 'string');
|
|
303
|
+
assert.ok(string);
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
test('C# can highlight character literals', async () => {
|
|
307
|
+
const syntax = new Syntax();
|
|
308
|
+
register(syntax);
|
|
309
|
+
const language = await syntax.getLanguage('csharp');
|
|
310
|
+
|
|
311
|
+
const code = "char c = 'A';";
|
|
312
|
+
const matches = await language.getMatches(syntax, code);
|
|
313
|
+
|
|
314
|
+
const string = matches.find(m => m.type === 'string');
|
|
315
|
+
assert.ok(string);
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
test('C# can highlight decimal numbers', async () => {
|
|
319
|
+
const syntax = new Syntax();
|
|
320
|
+
register(syntax);
|
|
321
|
+
const language = await syntax.getLanguage('csharp');
|
|
322
|
+
|
|
323
|
+
const code = 'int x = 42;';
|
|
324
|
+
const matches = await language.getMatches(syntax, code);
|
|
325
|
+
|
|
326
|
+
const number = matches.find(m => m.type === 'constant' && m.value === '42');
|
|
327
|
+
assert.ok(number);
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
test('C# can highlight hexadecimal numbers', async () => {
|
|
331
|
+
const syntax = new Syntax();
|
|
332
|
+
register(syntax);
|
|
333
|
+
const language = await syntax.getLanguage('csharp');
|
|
334
|
+
|
|
335
|
+
const code = 'int x = 0xFF;';
|
|
336
|
+
const matches = await language.getMatches(syntax, code);
|
|
337
|
+
|
|
338
|
+
const number = matches.find(m => m.type === 'constant' && m.value === '0xFF');
|
|
339
|
+
assert.ok(number);
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
test('C# can highlight function calls', async () => {
|
|
343
|
+
const syntax = new Syntax();
|
|
344
|
+
register(syntax);
|
|
345
|
+
const language = await syntax.getLanguage('csharp');
|
|
346
|
+
|
|
347
|
+
const code = 'Console.WriteLine("Hello");';
|
|
348
|
+
const matches = await language.getMatches(syntax, code);
|
|
349
|
+
|
|
350
|
+
const func = matches.find(
|
|
351
|
+
m => m.type === 'function' && m.value === 'WriteLine'
|
|
352
|
+
);
|
|
353
|
+
assert.ok(func);
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
test('C# can highlight CamelCase types', async () => {
|
|
357
|
+
const syntax = new Syntax();
|
|
358
|
+
register(syntax);
|
|
359
|
+
const language = await syntax.getLanguage('csharp');
|
|
360
|
+
|
|
361
|
+
const code = 'MyCustomClass obj = new MyCustomClass();';
|
|
362
|
+
const matches = await language.getMatches(syntax, code);
|
|
363
|
+
|
|
364
|
+
const type = matches.find(
|
|
365
|
+
m => m.type === 'type' && m.value === 'MyCustomClass'
|
|
366
|
+
);
|
|
367
|
+
assert.ok(type);
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
test('C# can highlight try-catch blocks', async () => {
|
|
371
|
+
const syntax = new Syntax();
|
|
372
|
+
register(syntax);
|
|
373
|
+
const language = await syntax.getLanguage('csharp');
|
|
374
|
+
|
|
375
|
+
const code = 'try { } catch (Exception ex) { } finally { }';
|
|
376
|
+
const matches = await language.getMatches(syntax, code);
|
|
377
|
+
|
|
378
|
+
const keywords = matches.filter(m => m.type === 'keyword');
|
|
379
|
+
assert.ok(keywords.some(m => m.value === 'try'));
|
|
380
|
+
assert.ok(keywords.some(m => m.value === 'catch'));
|
|
381
|
+
assert.ok(keywords.some(m => m.value === 'finally'));
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
test('C# can highlight switch statements', async () => {
|
|
385
|
+
const syntax = new Syntax();
|
|
386
|
+
register(syntax);
|
|
387
|
+
const language = await syntax.getLanguage('csharp');
|
|
388
|
+
|
|
389
|
+
const code =
|
|
390
|
+
'switch (x) {\n case 1:\n break;\n default:\n break;\n}';
|
|
391
|
+
const matches = await language.getMatches(syntax, code);
|
|
392
|
+
|
|
393
|
+
const keywords = matches.filter(m => m.type === 'keyword');
|
|
394
|
+
assert.ok(keywords.some(m => m.value === 'switch'));
|
|
395
|
+
assert.ok(keywords.some(m => m.value === 'case'));
|
|
396
|
+
assert.ok(keywords.some(m => m.value === 'default'));
|
|
397
|
+
assert.ok(keywords.some(m => m.value === 'break'));
|
|
398
|
+
});
|
|
399
|
+
|
|
400
|
+
test('C# can highlight properties with get/set', async () => {
|
|
401
|
+
const syntax = new Syntax();
|
|
402
|
+
register(syntax);
|
|
403
|
+
const language = await syntax.getLanguage('csharp');
|
|
404
|
+
|
|
405
|
+
const code = 'public int Property { get; set; }';
|
|
406
|
+
const matches = await language.getMatches(syntax, code);
|
|
407
|
+
|
|
408
|
+
const keywords = matches.filter(m => m.type === 'keyword');
|
|
409
|
+
assert.ok(keywords.some(m => m.value === 'get'));
|
|
410
|
+
assert.ok(keywords.some(m => m.value === 'set'));
|
|
411
|
+
});
|
|
412
|
+
|
|
413
|
+
test('C# can highlight static keyword', async () => {
|
|
414
|
+
const syntax = new Syntax();
|
|
415
|
+
register(syntax);
|
|
416
|
+
const language = await syntax.getLanguage('csharp');
|
|
417
|
+
|
|
418
|
+
const code = 'public static void Main() { }';
|
|
419
|
+
const matches = await language.getMatches(syntax, code);
|
|
420
|
+
|
|
421
|
+
const keywords = matches.filter(m => m.type === 'keyword');
|
|
422
|
+
assert.ok(keywords.some(m => m.value === 'static'));
|
|
423
|
+
});
|
|
424
|
+
|
|
425
|
+
test('C# can highlight abstract and virtual keywords', async () => {
|
|
426
|
+
const syntax = new Syntax();
|
|
427
|
+
register(syntax);
|
|
428
|
+
const language = await syntax.getLanguage('csharp');
|
|
429
|
+
|
|
430
|
+
const code = 'public abstract class Base { public virtual void Method() { } }';
|
|
431
|
+
const matches = await language.getMatches(syntax, code);
|
|
432
|
+
|
|
433
|
+
const keywords = matches.filter(m => m.type === 'keyword');
|
|
434
|
+
assert.ok(keywords.some(m => m.value === 'abstract'));
|
|
435
|
+
assert.ok(keywords.some(m => m.value === 'virtual'));
|
|
436
|
+
});
|