forked from enviPath/enviPy
Current Dev State
This commit is contained in:
683
static/js/ketcher2/test/dist/render-test.js
vendored
Normal file
683
static/js/ketcher2/test/dist/render-test.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
static/js/ketcher2/test/fixtures/fixtures.svg
vendored
Normal file
1
static/js/ketcher2/test/fixtures/fixtures.svg
vendored
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 1.7 MiB |
39
static/js/ketcher2/test/fixtures/issues/groups-2,8.mol
vendored
Normal file
39
static/js/ketcher2/test/fixtures/issues/groups-2,8.mol
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
Git #501, #532 Warnings in 2 and 8 group | 57f6de4
|
||||
Ketcher 6221712482D 1 1.00000 0.00000 0
|
||||
|
||||
18 15 0 0 0 999 V2000
|
||||
4.7750 -3.9493 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.5840 -4.5371 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.2750 -5.4882 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.2750 -5.4882 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.9660 -4.5371 0.0000 Ca 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.5615 -4.1706 0.0000 Ar 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.3450 -3.5534 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.3174 -3.7757 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.7512 -4.6710 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.5615 -5.1771 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.3181 -5.5775 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.3450 -5.7999 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.0150 -4.2281 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.2589 -5.2442 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.8096 -3.5494 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.3250 -3.7250 0.0000 Kr 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.3000 -5.1000 0.0000 Xe 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.3750 -6.4750 0.0000 Ba 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0 0 0
|
||||
2 3 2 0 0 0
|
||||
3 4 1 0 0 0
|
||||
4 5 2 0 0 0
|
||||
5 1 1 0 0 0
|
||||
11 12 1 0 0 0
|
||||
10 12 1 0 0 0
|
||||
6 10 1 0 0 0
|
||||
9 11 1 0 0 0
|
||||
8 9 1 0 0 0
|
||||
7 8 1 0 0 0
|
||||
6 7 1 0 0 0
|
||||
5 13 1 0 0 0
|
||||
5 14 1 0 0 0
|
||||
5 15 1 0 0 0
|
||||
M CHG 3 16 1 17 -1 18 1
|
||||
M END
|
||||
27
static/js/ketcher2/test/fixtures/issues/pseudoatoms.mol
vendored
Normal file
27
static/js/ketcher2/test/fixtures/issues/pseudoatoms.mol
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
Git #436, #500 Pseudoatoms and aliases | c44660f + 4
|
||||
Ketcher 6221715112D 1 1.00000 0.00000 0
|
||||
|
||||
9 9 0 0 0 999 V2000
|
||||
-1.8857 2.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.6002 2.0625 0.0000 A 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.6002 1.2375 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.8857 0.8250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.1712 1.2375 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.1712 2.0625 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.3147 2.4750 0.0000 Psd 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.4568 2.4750 0.0000 Pol 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.8857 0.0000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0 0 0 0
|
||||
1 6 2 0 0 0 0
|
||||
2 3 2 0 0 0 0
|
||||
3 4 1 0 0 0 0
|
||||
4 5 2 0 0 0 0
|
||||
5 6 1 0 0 0 0
|
||||
2 7 1 0 0 0 0
|
||||
6 8 1 0 0 0 0
|
||||
4 9 1 0 0 0 0
|
||||
A 2
|
||||
'Pseudo'
|
||||
A 3
|
||||
Alias
|
||||
M END
|
||||
61
static/js/ketcher2/test/fixtures/issues/s-group-data.mol
vendored
Normal file
61
static/js/ketcher2/test/fixtures/issues/s-group-data.mol
vendored
Normal file
@ -0,0 +1,61 @@
|
||||
Git #512 - Error parse Data-S-Group | da23a7d, d669c6c
|
||||
Ketcher 6221712572D 1 1.00000 0.00000 0
|
||||
|
||||
16 16 0 0 0 999 V2000
|
||||
0.9789 1.9661 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.9491 3.0117 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.8411 1.4993 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.1417 1.4576 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.9491 3.9989 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0000 3.5404 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.9363 3.5773 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.8577 0.5204 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.1572 0.4704 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.7199 0.0453 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.0241 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.5690 0.5573 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.4193 0.1072 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.5535 1.5326 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.2445 0.6121 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.2148 1.5779 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0 0 0 0
|
||||
1 3 2 0 0 0 0
|
||||
1 4 1 0 0 0 0
|
||||
2 5 1 0 0 0 0
|
||||
2 6 1 0 0 0 0
|
||||
2 7 1 0 0 0 0
|
||||
3 8 1 0 0 0 0
|
||||
4 9 2 0 0 0 0
|
||||
8 10 1 0 0 0 0
|
||||
8 11 2 0 0 0 0
|
||||
9 11 1 0 0 0 0
|
||||
10 12 1 0 0 0 0
|
||||
12 13 1 6 0 0 0
|
||||
12 14 1 0 0 0 0
|
||||
13 15 1 0 0 0 0
|
||||
15 16 1 0 0 0 0
|
||||
M STY 1 1 DAT
|
||||
M SLB 1 1 1
|
||||
M SAL 1 1 12
|
||||
M SDT 1 MDLBG_STEREO_KEY F
|
||||
M SDD 1 3.4690 0.0973 DA ALL 1 5
|
||||
M SED 1 S
|
||||
M STY 1 2 DAT
|
||||
M SLB 1 2 2
|
||||
M SAL 2 2 10 12
|
||||
M SDT 2 MDLBG_LIGAND_SITE F
|
||||
M SDD 2 2.8945 0.2013 DA ALL 1 5
|
||||
M SED 2 L1+
|
||||
M STY 1 3 DAT
|
||||
M SLB 1 3 3
|
||||
M SAL 3 2 12 13
|
||||
M SDT 3 MDLBG_LIGAND_SITE F
|
||||
M SDD 3 3.7441 0.2322 DA ALL 1 5
|
||||
M SED 3 L2-
|
||||
M STY 1 4 DAT
|
||||
M SLB 1 4 4
|
||||
M SAL 4 2 12 14
|
||||
M SDT 4 MDLBG_LIGAND_SITE F
|
||||
M SDD 4 3.3113 0.9450 DA ALL 1 5
|
||||
M SED 4 L3-
|
||||
M END
|
||||
16
static/js/ketcher2/test/fixtures/super/abc.mol
vendored
Normal file
16
static/js/ketcher2/test/fixtures/super/abc.mol
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
Ketcher 05231617112D 1 1.00000 0.00000 0
|
||||
|
||||
6 5 0 0 0 999 V2000
|
||||
5.4500 -5.6250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.1571 -6.3321 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.1230 -6.0733 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.8301 -6.7804 0.0000 Br 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.7961 -6.5216 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.5032 -7.2287 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0 0 0
|
||||
2 3 1 0 0 0
|
||||
3 4 1 0 0 0
|
||||
4 5 1 0 0 0
|
||||
5 6 1 0 0 0
|
||||
M END
|
||||
161
static/js/ketcher2/test/fixtures/super/basic.mol
vendored
Normal file
161
static/js/ketcher2/test/fixtures/super/basic.mol
vendored
Normal file
@ -0,0 +1,161 @@
|
||||
|
||||
Ketcher 04131617572D 1 1.00000 0.00000 0
|
||||
|
||||
76 71 0 1 0 999 V2000
|
||||
14.2771 -3.2353 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
15.1345 -3.7301 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
15.9917 -3.2353 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
16.8487 -3.7301 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
17.7060 -3.2353 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 1
|
||||
18.5632 -3.7301 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
19.4203 -3.2353 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
20.2776 -3.7301 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
21.1348 -3.2353 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
21.9920 -3.7301 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
22.8493 -3.2353 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
23.7064 -3.7301 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.2633 -0.6490 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.9634 0.0510 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
15.9195 -0.2051 0.0000 C 0 0 0 1 0 0 0 0 0 0 0 0
|
||||
16.6193 0.4947 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
17.5754 0.2386 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
18.2754 0.9384 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
16.3631 1.4508 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
17.0631 2.1507 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
16.8069 3.1071 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
17.5067 3.8069 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
17.2506 4.7629 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
17.9504 5.4628 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
15.8507 3.3631 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
15.1508 2.6633 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.1948 2.9195 0.0000 C 0 0 0 0 0 0 0 0 0 0 1 0
|
||||
13.3709 1.5265 0.0000 L 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.5387 2.4758 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.8387 1.7758 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.8826 2.0319 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.1826 1.3321 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.9387 3.8756 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.9824 4.1316 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.7262 5.0878 0.0000 I 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.2824 3.4317 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
21.1348 -2.2454 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
20.2776 -1.7505 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
20.0214 -0.7942 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
23.7064 -4.7198 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
15.9917 -2.2454 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
18.0191 1.8946 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
18.7191 2.5945 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
19.6751 2.3382 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
20.3749 3.0382 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
21.3311 2.7820 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
22.0309 3.4818 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
22.9869 3.2257 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
23.6868 3.9256 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
24.6430 3.6694 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
25.3428 4.3693 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
26.2988 4.1131 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
26.9989 4.8130 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
27.9549 4.5569 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
28.6548 5.2567 0.0000 Q 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
21.7747 4.4381 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
25.0866 5.3255 0.0000 X 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
26.7426 5.7692 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.3914 0.2563 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.3474 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.6036 -0.9561 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.9038 -1.6560 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.9478 -1.3997 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.6916 -0.4436 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.5598 -1.2122 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.8160 -2.1683 0.0000 Br 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.7720 -2.4245 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
28.6082 1.9478 0.0000 Hg 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
25.1927 0.7845 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
25.1184 -0.9480 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
25.9758 -1.3688 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
26.7094 -1.7896 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
27.5667 -2.2846 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
28.4242 -1.7896 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
29.2816 -2.2846 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
30.1389 -1.7896 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 2 0 0 0
|
||||
2 3 1 0 0 0
|
||||
3 4 1 0 0 0
|
||||
4 5 1 4 0 0
|
||||
5 6 1 0 0 0
|
||||
7 8 1 0 0 0
|
||||
8 9 1 0 0 0
|
||||
9 10 1 0 0 0
|
||||
10 11 2 0 0 0
|
||||
11 12 1 0 0 0
|
||||
13 14 1 0 0 0
|
||||
14 15 8 0 0 0
|
||||
15 16 1 0 0 0
|
||||
16 17 1 0 0 0
|
||||
17 18 1 0 0 0
|
||||
16 19 1 0 0 0
|
||||
19 20 1 0 0 0
|
||||
20 21 1 0 0 0
|
||||
21 22 1 0 0 0
|
||||
22 23 1 0 0 0
|
||||
23 24 1 0 0 0
|
||||
21 25 1 0 0 0
|
||||
25 26 1 0 0 0
|
||||
26 27 1 0 0 0
|
||||
27 28 1 0 0 0
|
||||
28 29 1 0 0 0
|
||||
29 30 1 0 0 0
|
||||
30 31 4 0 0 0
|
||||
31 32 1 0 0 0
|
||||
27 33 1 6 0 0
|
||||
33 34 1 0 0 0
|
||||
34 35 3 0 0 0
|
||||
29 36 1 0 0 0
|
||||
9 37 1 1 0 0
|
||||
37 38 1 0 0 0
|
||||
38 39 3 0 0 0
|
||||
12 40 1 6 0 0
|
||||
3 41 1 0 0 0
|
||||
7 6 1 0 0 0
|
||||
20 42 1 0 0 0
|
||||
42 43 2 3 0 0
|
||||
43 44 1 0 2 0
|
||||
44 45 8 0 0 0
|
||||
45 46 1 0 1 0
|
||||
46 47 4 0 0 0
|
||||
47 48 1 0 0 -1
|
||||
48 49 5 0 0 0
|
||||
49 50 1 0 0 4
|
||||
50 51 6 0 0 0
|
||||
51 52 1 0 0 8
|
||||
52 53 7 0 0 0
|
||||
53 54 1 0 0 0
|
||||
54 55 1 0 0 0
|
||||
47 56 1 0 0 0
|
||||
51 57 1 0 0 0
|
||||
53 58 1 0 0 0
|
||||
59 60 4 0 0 0
|
||||
60 61 4 0 0 0
|
||||
61 62 4 0 0 0
|
||||
62 63 4 0 0 0
|
||||
63 64 4 0 0 0
|
||||
64 59 4 0 0 0
|
||||
61 65 1 6 0 0
|
||||
65 66 1 1 0 0
|
||||
66 67 1 1 0 0
|
||||
70 71 5 0 0 0
|
||||
71 72 1 0 0 0
|
||||
72 73 6 0 0 0
|
||||
73 74 1 0 0 12
|
||||
74 75 7 0 0 0
|
||||
75 76 1 0 0 0
|
||||
A 58
|
||||
ACH
|
||||
M CHG 2 7 -3 25 2
|
||||
M ISO 1 19 13
|
||||
M RAD 1 22 1
|
||||
M RBC 1 31 -2
|
||||
M SUB 1 17 -2
|
||||
M UNS 1 4 1
|
||||
M ALS 28 3 F Sg Bh Pr
|
||||
M END
|
||||
124
static/js/ketcher2/test/fixtures/super/charges.mol
vendored
Normal file
124
static/js/ketcher2/test/fixtures/super/charges.mol
vendored
Normal file
@ -0,0 +1,124 @@
|
||||
complex_stereo-0011-00
|
||||
-INDIGO-06261713242D
|
||||
|
||||
0 0 0 0 0 0 0 0 0 0 0 V3000
|
||||
M V30 BEGIN CTAB
|
||||
M V30 COUNTS 41 67 0 0 0
|
||||
M V30 BEGIN ATOM
|
||||
M V30 1 C 4.7708 -1.9042 0.0 0 CFG=1
|
||||
M V30 2 C 7.0937 -1.5596 0.0 0 CFG=2
|
||||
M V30 3 C 8.9645 -3.1877 0.0 0 CFG=2
|
||||
M V30 4 C 9.925 0.4806 0.0 0 CFG=1
|
||||
M V30 5 C 6.9445 1.1628 0.0 0 CFG=1
|
||||
M V30 6 C 10.5533 -4.0532 0.0 0 CFG=2
|
||||
M V30 7 C 10.9835 -1.9889 0.0 0
|
||||
M V30 8 C 9.4083 -1.3931 0.0 0 CFG=2
|
||||
M V30 9 C 11.518 -0.303 0.0 0 CFG=1
|
||||
M V30 10 C 10.3542 2.0594 0.0 0 CFG=2
|
||||
M V30 11 C 11.8181 1.6915 0.0 0
|
||||
M V30 12 C 8.4219 0.6275 0.0 0 CFG=1
|
||||
M V30 13 C 7.2623 2.8675 0.0 0 CFG=2
|
||||
M V30 14 C 8.8052 2.3245 0.0 0
|
||||
M V30 15 C 2.4833 -2.8738 0.0 0 CFG=2
|
||||
M V30 16 C 1.6356 -0.5431 0.0 0 CFG=2
|
||||
M V30 17 C -0.9821 -3.2867 0.0 0 CFG=1
|
||||
M V30 18 C 1.2947 -5.3277 0.0 0 CFG=1
|
||||
M V30 19 C 0.6651 0.9837 0.0 0 CFG=2
|
||||
M V30 20 C -0.7114 -0.6136 0.0 0
|
||||
M V30 21 C 0.3778 -1.898 0.0 0 CFG=2
|
||||
M V30 22 C -1.9959 -1.8294 0.0 0 CFG=1
|
||||
M V30 23 C -2.1225 -4.4599 0.0 0 CFG=2
|
||||
M V30 24 C -3.2248 -3.4287 0.0 0
|
||||
M V30 25 C 0.2616 -4.1435 0.0 0 CFG=1
|
||||
M V30 26 C 0.1907 -6.6649 0.0 0 CFG=2
|
||||
M V30 27 C -0.8959 -5.4423 0.0 0
|
||||
M V30 28 C 5.75 -5.1583 0.0 0 CFG=2
|
||||
M V30 29 C 3.775 -6.6583 0.0 0 CFG=2
|
||||
M V30 30 C 7.1708 -8.3458 0.0 0 CFG=1
|
||||
M V30 31 C 8.4458 -5.5667 0.0 0 CFG=1
|
||||
M V30 32 C 2.6041 -8.0375 0.0 0 CFG=2
|
||||
M V30 33 C 4.5375 -8.8791 0.0 0
|
||||
M V30 34 C 5.4417 -7.4584 0.0 0 CFG=2
|
||||
M V30 35 C 6.0792 -9.7458 0.0 0 CFG=1
|
||||
M V30 36 C 8.6292 -9.0875 0.0 0 CFG=2
|
||||
M V30 37 C 7.9708 -10.4458 0.0 0
|
||||
M V30 38 C 7.6208 -6.9042 0.0 0 CFG=1
|
||||
M V30 39 C 10.05 -6.225 0.0 0 CFG=2
|
||||
M V30 40 C 9.2042 -7.625 0.0 0
|
||||
M V30 41 C 4.4646 -0.8867 0.0 0
|
||||
M V30 END ATOM
|
||||
M V30 BEGIN BOND
|
||||
M V30 1 1 8 7 CFG=1
|
||||
M V30 2 1 6 8
|
||||
M V30 3 1 9 4
|
||||
M V30 4 1 5 2
|
||||
M V30 5 1 10 4
|
||||
M V30 6 1 3 2
|
||||
M V30 7 1 4 11 CFG=1
|
||||
M V30 8 1 9 11 CFG=1
|
||||
M V30 9 1 10 11 CFG=1
|
||||
M V30 10 1 15 17 CFG=1
|
||||
M V30 11 1 21 16
|
||||
M V30 12 1 19 20 CFG=1
|
||||
M V30 13 1 21 20 CFG=1
|
||||
M V30 14 1 19 21
|
||||
M V30 15 1 22 17
|
||||
M V30 16 1 18 15
|
||||
M V30 17 1 23 17
|
||||
M V30 18 1 16 15
|
||||
M V30 19 1 17 24 CFG=1
|
||||
M V30 20 1 22 24 CFG=1
|
||||
M V30 21 1 23 24 CFG=1
|
||||
M V30 22 1 22 23
|
||||
M V30 23 1 19 16
|
||||
M V30 24 1 25 18
|
||||
M V30 25 1 1 15
|
||||
M V30 26 1 26 18
|
||||
M V30 27 1 16 20 CFG=1
|
||||
M V30 28 1 18 27 CFG=1
|
||||
M V30 29 1 25 27 CFG=1
|
||||
M V30 30 1 26 27 CFG=1
|
||||
M V30 31 1 25 26
|
||||
M V30 32 1 9 10
|
||||
M V30 33 1 6 3
|
||||
M V30 34 1 12 5
|
||||
M V30 35 1 1 2
|
||||
M V30 36 1 13 5
|
||||
M V30 37 1 3 7 CFG=1
|
||||
M V30 38 1 5 14 CFG=1
|
||||
M V30 39 1 12 14 CFG=1
|
||||
M V30 40 1 13 14 CFG=1
|
||||
M V30 41 1 12 13
|
||||
M V30 42 1 2 4 CFG=1
|
||||
M V30 43 1 8 3
|
||||
M V30 44 1 28 30 CFG=1
|
||||
M V30 45 1 34 29
|
||||
M V30 46 1 32 33 CFG=1
|
||||
M V30 47 1 34 33 CFG=1
|
||||
M V30 48 1 32 34
|
||||
M V30 49 1 35 30
|
||||
M V30 50 1 31 28
|
||||
M V30 51 1 36 30
|
||||
M V30 52 1 29 28
|
||||
M V30 53 1 30 37 CFG=1
|
||||
M V30 54 1 35 37 CFG=1
|
||||
M V30 55 1 36 37 CFG=1
|
||||
M V30 56 1 35 36
|
||||
M V30 57 1 32 29
|
||||
M V30 58 1 38 31
|
||||
M V30 59 1 1 28
|
||||
M V30 60 1 39 31
|
||||
M V30 61 1 29 33 CFG=1
|
||||
M V30 62 1 31 40 CFG=1
|
||||
M V30 63 1 38 40 CFG=1
|
||||
M V30 64 1 39 40 CFG=1
|
||||
M V30 65 1 38 39
|
||||
M V30 66 1 6 7 CFG=1
|
||||
M V30 67 1 1 41 CFG=1
|
||||
M V30 END BOND
|
||||
M V30 BEGIN COLLECTION
|
||||
M V30 MDLV30/STERAC1 ATOMS=(31 1 2 3 4 5 6 8 9 10 12 13 15 16 17 18 19 21 22-
|
||||
M V30 23 25 26 28 29 30 31 32 34 35 36 38 39)
|
||||
M V30 END COLLECTION
|
||||
M V30 END CTAB
|
||||
M END
|
||||
95
static/js/ketcher2/test/fixtures/super/cyclic.mol
vendored
Normal file
95
static/js/ketcher2/test/fixtures/super/cyclic.mol
vendored
Normal file
@ -0,0 +1,95 @@
|
||||
|
||||
Ketcher 07151621232D 1 1.00000 0.00000 0
|
||||
|
||||
43 47 0 1 0 999 V2000
|
||||
9.2254 -6.1112 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.2254 -7.1287 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.7965 -7.8866 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.6790 -8.2708 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.0249 -8.9560 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.0839 -9.2363 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.7172 -8.1565 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.1732 -7.5586 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.7762 -6.5265 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.3817 -5.5298 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.5926 -4.9276 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.7101 -5.3948 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.7238 -5.2702 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.2670 -4.3462 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.0008 -6.3708 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.4303 -5.7582 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.3440 -6.1839 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.1675 -5.1041 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.5893 -4.5954 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.3576 -7.2117 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.1527 -8.6549 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.5473 -9.5582 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.9243 -10.3680 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.5336 -9.7139 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.4467 -7.5025 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.4467 -8.3746 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.5954 -8.8418 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.5954 -9.8281 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.7233 -8.3746 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.8823 -8.8418 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.8823 -9.8281 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.0413 -10.3265 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.1692 -9.8593 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.1692 -8.8729 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.0413 -8.3746 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.6265 -7.0975 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.6265 -6.1112 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.7959 -7.4609 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.0074 -8.0320 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.8101 -5.1768 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.8342 -5.0522 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.4085 -4.1178 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.2320 -5.8309 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2 1 1 0 0 0
|
||||
3 2 1 0 0 0
|
||||
4 3 1 0 0 0
|
||||
4 5 1 6 0 0
|
||||
5 6 1 0 0 0
|
||||
6 4 1 0 0 0
|
||||
7 4 1 0 0 0
|
||||
8 7 1 0 0 0
|
||||
8 9 1 0 0 0
|
||||
9 10 1 0 0 0
|
||||
10 11 1 0 0 0
|
||||
11 12 2 0 0 0
|
||||
12 13 1 0 0 0
|
||||
13 1 1 0 0 0
|
||||
14 13 2 0 0 0
|
||||
15 12 1 0 0 0
|
||||
16 10 1 0 0 0
|
||||
17 16 1 0 0 0
|
||||
18 16 1 0 0 0
|
||||
9 16 1 0 0 0
|
||||
10 19 1 6 0 0
|
||||
9 20 1 6 0 0
|
||||
3 21 1 1 0 0
|
||||
22 21 1 0 0 0
|
||||
23 22 2 0 0 0
|
||||
24 22 1 0 0 0
|
||||
25 2 1 0 0 0
|
||||
25 26 1 1 0 0
|
||||
27 26 1 0 0 0
|
||||
28 27 2 0 0 0
|
||||
29 27 1 0 0 0
|
||||
30 29 1 0 0 0
|
||||
31 30 2 0 0 0
|
||||
32 31 1 0 0 0
|
||||
33 32 2 0 0 0
|
||||
33 34 1 0 0 0
|
||||
34 35 2 0 0 0
|
||||
35 30 1 0 0 0
|
||||
25 36 1 0 0 0
|
||||
36 37 1 0 0 0
|
||||
37 1 1 0 0 0
|
||||
36 38 1 1 0 0
|
||||
2 39 1 6 0 0
|
||||
1 40 1 1 0 0
|
||||
41 40 1 0 0 0
|
||||
42 41 2 0 0 0
|
||||
43 41 1 0 0 0
|
||||
M END
|
||||
23
static/js/ketcher2/test/fixtures/super/pseudoatoms.mol
vendored
Normal file
23
static/js/ketcher2/test/fixtures/super/pseudoatoms.mol
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
|
||||
Marvin 02121015302D
|
||||
|
||||
9 9 0 0 0 0 999 V2000
|
||||
-1.8857 2.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.6002 2.0625 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.6002 1.2375 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.8857 0.8250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.1712 1.2375 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.1712 2.0625 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.3147 2.4750 0.0000 Psd 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.4568 2.4750 0.0000 Pol 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.8857 -0.0000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0 0 0 0
|
||||
1 6 2 0 0 0 0
|
||||
2 3 2 0 0 0 0
|
||||
3 4 1 0 0 0 0
|
||||
4 5 2 0 0 0 0
|
||||
5 6 1 0 0 0 0
|
||||
2 7 1 0 0 0 0
|
||||
6 8 1 0 0 0 0
|
||||
4 9 1 0 0 0 0
|
||||
M END
|
||||
174
static/js/ketcher2/test/fixtures/super/reaction.rxn
vendored
Normal file
174
static/js/ketcher2/test/fixtures/super/reaction.rxn
vendored
Normal file
@ -0,0 +1,174 @@
|
||||
$RXN
|
||||
|
||||
|
||||
|
||||
2 1 0
|
||||
$MOL
|
||||
|
||||
Ketcher 04131617372D 1 1.00000 0.00000 0
|
||||
|
||||
6 6 0 1 0 999 V2000
|
||||
0.8660 1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.7320 0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.7320 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.8660 -1.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0000 -0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0000 0.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0 0 0
|
||||
2 3 2 0 0 0
|
||||
3 4 1 0 0 0
|
||||
4 5 2 0 0 0
|
||||
5 6 1 0 0 0
|
||||
6 1 2 0 0 0
|
||||
M END
|
||||
$MOL
|
||||
|
||||
Ketcher 04131617372D 1 1.00000 0.00000 0
|
||||
|
||||
43 42 0 1 0 999 V2000
|
||||
3.7320 -2.0002 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.5981 -2.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.4641 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.3301 -2.5001 0.0000 C 0 0 0 0 0 0 0 0 0 1 0 0
|
||||
7.1962 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 2 0 1
|
||||
8.0622 -2.5001 0.0000 C 0 0 0 0 0 0 0 0 0 3 0 0
|
||||
8.9282 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 4 0 0
|
||||
9.7943 -2.5001 0.0000 C 0 0 0 0 0 0 0 0 0 5 0 0
|
||||
10.6603 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 6 0 0
|
||||
11.5264 -2.5001 0.0000 C 0 0 0 0 0 0 0 0 0 7 0 0
|
||||
12.3925 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.2584 -2.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.1245 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.9905 -2.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
15.8566 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
16.7226 -2.5001 0.0000 C 0 0 0 1 0 0 0 0 0 0 0 0
|
||||
17.5886 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
18.4547 -2.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
19.3207 -2.0002 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
20.1867 -2.5001 0.0000 R# 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
17.5886 -1.0001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
18.4547 -0.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
18.4547 0.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
19.3207 1.0001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
19.3207 2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
20.1867 2.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
17.5886 1.0001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
16.7226 0.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
15.8566 1.0001 0.0000 C 0 0 0 0 0 0 0 0 0 0 1 0
|
||||
14.9905 0.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.1245 1.0001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.2584 0.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.3925 1.0001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.5264 0.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
15.8566 2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.9905 2.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.9905 3.5001 0.0000 R# 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.1245 2.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.6603 -1.0001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.7943 -0.5001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.7943 0.5001 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.2584 -3.5001 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.4641 -1.0001 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 2 0 0 0
|
||||
2 3 1 0 0 0
|
||||
3 4 1 0 0 0
|
||||
4 5 1 0 0 0
|
||||
5 6 1 0 0 0
|
||||
7 8 1 0 0 0
|
||||
8 9 1 0 0 0
|
||||
9 10 1 0 0 0
|
||||
10 11 2 0 0 0
|
||||
11 12 1 0 0 0
|
||||
12 13 1 0 0 0
|
||||
13 14 1 0 0 0
|
||||
14 15 1 0 0 0
|
||||
15 16 1 0 0 0
|
||||
16 17 1 0 0 0
|
||||
17 18 1 0 0 0
|
||||
18 19 1 0 0 0
|
||||
19 20 1 0 0 0
|
||||
17 21 1 0 0 0
|
||||
21 22 1 0 0 0
|
||||
22 23 1 0 0 0
|
||||
23 24 1 0 0 0
|
||||
24 25 1 0 0 0
|
||||
25 26 1 0 0 0
|
||||
23 27 1 0 0 0
|
||||
27 28 1 0 0 0
|
||||
28 29 1 0 0 0
|
||||
29 30 1 0 0 0
|
||||
30 31 1 0 0 0
|
||||
31 32 1 0 0 0
|
||||
32 33 1 0 0 0
|
||||
33 34 1 0 0 0
|
||||
29 35 1 6 0 0
|
||||
35 36 1 0 0 0
|
||||
36 37 1 0 0 0
|
||||
31 38 1 0 0 0
|
||||
9 39 1 1 0 0
|
||||
39 40 1 0 0 0
|
||||
40 41 1 0 0 0
|
||||
12 42 1 6 0 0
|
||||
3 43 1 0 0 0
|
||||
7 6 1 0 0 0
|
||||
M CHG 1 27 2
|
||||
M ISO 1 21 13
|
||||
M RAD 1 24 1
|
||||
M RGP 2 20 2 37 1
|
||||
M RBC 1 33 -2
|
||||
M SUB 1 18 -2
|
||||
M UNS 1 4 1
|
||||
M STY 1 1 DAT
|
||||
M SLB 1 1 1
|
||||
M SAL 1 1 9
|
||||
M SDT 1 Purity
|
||||
M SDD 1 -1.9546 -2.1107 DR ALL 1 0
|
||||
M SED 1 Purity = 50%
|
||||
M END
|
||||
$MOL
|
||||
|
||||
Ketcher 04131617372D 1 1.00000 0.00000 0
|
||||
|
||||
19 18 0 1 0 999 V2000
|
||||
26.1867 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
27.0527 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 1 0 0
|
||||
27.9187 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 2 0 0
|
||||
28.7847 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 3 0 0
|
||||
29.6509 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 4 0 0
|
||||
30.5169 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 5 0 0
|
||||
31.3829 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 6 0 0
|
||||
32.2489 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 7 0 0
|
||||
33.1150 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
33.9811 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
34.8471 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
35.7131 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
36.5792 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
37.4452 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
38.3112 -0.2500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
39.1772 -0.7500 0.0000 L 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
31.3829 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
34.8471 0.7500 0.0000 X 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
36.5792 0.7500 0.0000 L 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0 0 0
|
||||
2 3 2 3 0 0
|
||||
3 4 1 0 2 0
|
||||
4 5 8 0 0 0
|
||||
5 6 1 0 1 0
|
||||
6 7 4 0 0 0
|
||||
7 8 1 0 0 -1
|
||||
8 9 5 0 0 0
|
||||
9 10 1 0 0 4
|
||||
10 11 6 0 0 0
|
||||
11 12 1 0 0 8
|
||||
12 13 7 0 0 0
|
||||
13 14 1 0 0 0
|
||||
14 15 1 0 0 0
|
||||
15 16 1 0 0 0
|
||||
7 17 1 0 0 0
|
||||
11 18 1 0 0 0
|
||||
13 19 1 0 0 0
|
||||
A 17
|
||||
CYC
|
||||
M ALS 16 4 T C Si Ge As
|
||||
M ALS 19 4 F B C N P
|
||||
M END
|
||||
140
static/js/ketcher2/test/fixtures/super/rgroups.mol
vendored
Normal file
140
static/js/ketcher2/test/fixtures/super/rgroups.mol
vendored
Normal file
@ -0,0 +1,140 @@
|
||||
$MDL REV 1
|
||||
$MOL
|
||||
$HDR
|
||||
|
||||
|
||||
|
||||
$END HDR
|
||||
$CTAB
|
||||
14 14 0 0 0 999 V2000
|
||||
-3.4608 -4.5124 0.0000 R# 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.5948 -4.0124 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.7288 -4.5124 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.8628 -4.0124 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0032 -4.5124 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.8692 -4.0124 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.7352 -4.5124 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.6012 -4.0124 0.0000 R# 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.8628 -3.0124 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.6718 -2.4246 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.3628 -1.4735 0.0000 R# 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.3628 -1.4735 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.0538 -2.4246 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.8536 -3.0465 0.0000 R# 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0 0 0
|
||||
2 3 1 0 0 0
|
||||
3 4 1 0 0 0
|
||||
4 5 1 0 0 0
|
||||
5 6 1 0 0 0
|
||||
6 7 1 0 0 0
|
||||
7 8 1 0 0 0
|
||||
4 9 1 0 0 0
|
||||
9 10 1 0 0 0
|
||||
10 11 1 0 0 0
|
||||
11 12 1 0 0 0
|
||||
12 13 1 0 0 0
|
||||
13 9 1 0 0 0
|
||||
2 14 1 0 0 0
|
||||
M RGP 4 1 2 8 1 11 3 14 1
|
||||
M LOG 1 1 0 0 1
|
||||
M LOG 1 2 3 0 >0
|
||||
M LOG 1 3 0 1 >0
|
||||
M END
|
||||
$END CTAB
|
||||
$RGP
|
||||
1
|
||||
$CTAB
|
||||
3 2 0 0 0 999 V2000
|
||||
-3.6375 -10.6466 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.7715 -11.1466 0.0000 Br 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.6375 -9.6466 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0 0 0
|
||||
1 3 2 0 0 0
|
||||
M APO 1 1 1
|
||||
M END
|
||||
$END CTAB
|
||||
$CTAB
|
||||
6 5 0 0 0 999 V2000
|
||||
-0.5966 -10.1949 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.2694 -10.6949 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.9939 -9.9800 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0194 -11.6983 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.0862 -11.1766 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.5966 -9.1948 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0 0 0
|
||||
2 3 1 0 0 0
|
||||
2 4 1 0 0 0
|
||||
2 5 1 0 0 0
|
||||
1 6 2 0 0 0
|
||||
M APO 1 1 1
|
||||
M END
|
||||
$END CTAB
|
||||
$END RGP
|
||||
$RGP
|
||||
2
|
||||
$CTAB
|
||||
4 3 0 0 0 999 V2000
|
||||
7.4705 -10.3679 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.3365 -9.8679 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.6045 -9.8679 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.4705 -11.3679 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0 0 0
|
||||
1 3 1 0 0 0
|
||||
1 4 1 0 0 0
|
||||
M APO 1 4 3
|
||||
M END
|
||||
$END CTAB
|
||||
$CTAB
|
||||
1 0 0 0 0 999 V2000
|
||||
10.4785 -10.5179 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
M APO 1 1 3
|
||||
M END
|
||||
$END CTAB
|
||||
$END RGP
|
||||
$RGP
|
||||
3
|
||||
$CTAB
|
||||
6 6 0 0 0 999 V2000
|
||||
8.0535 -13.7929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.9195 -14.2929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.9195 -15.2929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.0535 -15.7929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.1875 -15.2929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.1875 -14.2929 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0 0 0
|
||||
2 3 2 0 0 0
|
||||
3 4 1 0 0 0
|
||||
4 5 2 0 0 0
|
||||
5 6 1 0 0 0
|
||||
6 1 2 0 0 0
|
||||
M APO 1 1 1
|
||||
M END
|
||||
$END CTAB
|
||||
$CTAB
|
||||
5 5 0 0 0 999 V2000
|
||||
11.5535 -14.1172 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.3625 -14.7050 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.0535 -15.6561 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.0535 -15.6561 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.7445 -14.7050 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0 0 0
|
||||
2 3 2 0 0 0
|
||||
3 4 1 0 0 0
|
||||
4 5 2 0 0 0
|
||||
5 1 1 0 0 0
|
||||
M APO 1 1 1
|
||||
M END
|
||||
$END CTAB
|
||||
$CTAB
|
||||
3 3 0 0 0 999 V2000
|
||||
14.1285 -15.2815 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
15.1285 -15.2815 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.6285 -14.4155 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0 0 0
|
||||
2 3 1 0 0 0
|
||||
1 3 1 0 0 0
|
||||
M APO 1 3 1
|
||||
M END
|
||||
$END CTAB
|
||||
$END RGP
|
||||
$END MOL
|
||||
223
static/js/ketcher2/test/fixtures/super/sgroups.mol
vendored
Normal file
223
static/js/ketcher2/test/fixtures/super/sgroups.mol
vendored
Normal file
@ -0,0 +1,223 @@
|
||||
|
||||
Ketcher 04131611202D 1 1.00000 0.00000 0
|
||||
|
||||
73 65 0 0 0 999 V2000
|
||||
-0.7649 -1.7473 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.1310 -2.2645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.0269 -1.7473 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.9228 -2.2645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.8187 -1.7473 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.7146 -2.2645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.6104 -1.7473 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.9335 -5.1229 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.0376 -5.6402 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.1417 -5.1229 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.2459 -5.6402 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.3500 -5.1229 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.4541 -5.6402 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.4418 -5.1229 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.0117 -8.7984 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.1158 -9.3157 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.2199 -8.7984 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.3241 -9.3157 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.4282 -8.7984 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.5323 -9.3157 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.3636 -8.7984 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.8596 -12.2102 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.9637 -12.7275 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.9637 -12.2102 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.0678 -12.7275 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.1719 -12.2102 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.1719 -12.7275 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.2761 -12.2102 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.9479 -1.7748 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.0520 -2.2920 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.1561 -1.7748 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.2602 -2.2920 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.3642 -1.7748 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.4683 -2.2920 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.5724 -1.7748 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.8646 -4.5158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.9986 -5.0158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.1325 -4.5158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.2665 -5.0158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.4004 -4.5158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.5343 -5.0158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.6683 -4.5158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.9896 -7.1158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.1236 -7.6158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.2575 -7.1158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.3915 -7.6158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.5254 -7.1158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.6593 -7.6158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.7933 -7.1158 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.8164 -13.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.6825 -14.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.5485 -13.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.4145 -14.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.2805 -13.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
15.1466 -14.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
16.0126 -13.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
16.8786 -14.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
17.7446 -13.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
18.6107 -14.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
19.4767 -13.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
20.3427 -14.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
21.2087 -13.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
22.0748 -14.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
22.9408 -13.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
23.8068 -14.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.5485 -12.6908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
15.1466 -15.1908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.0269 -1.7473 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.9228 -2.2645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.8187 -1.7473 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.0269 -1.7473 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.9228 -2.2645 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.8187 -1.7473 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0 0 0
|
||||
3 4 1 0 0 0
|
||||
4 5 1 0 0 0
|
||||
73 6 1 0 0 0
|
||||
6 7 1 0 0 0
|
||||
9 8 1 0 0 0
|
||||
10 9 1 0 0 0
|
||||
11 10 1 0 0 0
|
||||
12 11 1 0 0 0
|
||||
13 12 1 0 0 0
|
||||
14 13 1 0 0 0
|
||||
16 15 1 0 0 0
|
||||
17 16 1 0 0 0
|
||||
18 17 1 0 0 0
|
||||
19 18 1 0 0 0
|
||||
20 19 1 0 0 0
|
||||
21 20 1 0 0 0
|
||||
23 22 1 0 0 0
|
||||
24 23 1 0 0 0
|
||||
25 24 1 0 0 0
|
||||
26 25 1 0 0 0
|
||||
27 26 1 0 0 0
|
||||
28 27 1 0 0 0
|
||||
30 29 1 0 0 0
|
||||
31 30 1 0 0 0
|
||||
32 31 1 0 0 0
|
||||
33 32 1 0 0 0
|
||||
34 33 1 0 0 0
|
||||
35 34 1 0 0 0
|
||||
3 2 1 0 0 0
|
||||
37 36 1 0 0 0
|
||||
38 37 1 0 0 0
|
||||
39 38 1 0 0 0
|
||||
40 39 1 0 0 0
|
||||
41 40 1 0 0 0
|
||||
42 41 1 0 0 0
|
||||
44 43 1 0 0 0
|
||||
45 44 1 0 0 0
|
||||
46 45 1 0 0 0
|
||||
47 46 1 0 0 0
|
||||
48 47 1 0 0 0
|
||||
49 48 1 0 0 0
|
||||
50 51 1 0 0 0
|
||||
51 52 1 0 0 0
|
||||
52 53 1 0 0 0
|
||||
53 54 1 0 0 0
|
||||
54 55 1 0 0 0
|
||||
55 56 1 0 0 0
|
||||
56 57 1 0 0 0
|
||||
57 58 2 0 0 0
|
||||
58 59 1 0 0 0
|
||||
59 60 1 0 0 0
|
||||
60 61 1 0 0 0
|
||||
61 62 1 0 0 0
|
||||
62 63 1 0 0 0
|
||||
63 64 1 0 0 0
|
||||
64 65 1 0 0 0
|
||||
52 66 1 1 0 0
|
||||
55 67 1 1 0 0
|
||||
68 69 1 0 0 0
|
||||
69 70 1 0 0 0
|
||||
5 68 1 0 0 0
|
||||
71 72 1 0 0 0
|
||||
72 73 1 0 0 0
|
||||
70 71 1 0 0 0
|
||||
M STY 1 1 MUL
|
||||
M SLB 1 1 1
|
||||
M SAL 1 9 3 4 5 68 69 70 71 72 73
|
||||
M SPA 1 3 3 4 5
|
||||
M SBL 1 2 4 30
|
||||
M SMT 1 3
|
||||
M SDI 1 4 3.2666 -1.2559 3.2666 -2.7559
|
||||
M SDI 1 4 0.5790 -2.7559 0.5790 -1.2559
|
||||
M STY 1 2 GEN
|
||||
M SLB 1 2 2
|
||||
M SAL 2 3 11 12 10
|
||||
M SDI 2 4 3.5897 -4.6315 3.5897 -6.1315
|
||||
M SDI 2 4 0.9020 -6.1315 0.9020 -4.6315
|
||||
M STY 1 3 SRU
|
||||
M SLB 1 3 3
|
||||
M SCN 1 3 HT
|
||||
M SMT 3 n
|
||||
M SAL 3 3 18 19 17
|
||||
M SBL 3 2 13 16
|
||||
M SDI 3 4 3.6679 -8.3070 3.6679 -9.8070
|
||||
M SDI 3 4 0.9802 -9.8070 0.9802 -8.3070
|
||||
M STY 1 4 SUP
|
||||
M SLB 1 4 4
|
||||
M SAL 4 3 26 25 24
|
||||
M SBL 4 2 19 22
|
||||
M SMT 4 fgf
|
||||
M STY 1 5 DAT
|
||||
M SLB 1 5 5
|
||||
M SAL 5 3 33 32 31
|
||||
M SDT 5 fgfh
|
||||
M SDD 5 0.0000 0.0000 DR ALL 1 6
|
||||
M SED 5 absolute
|
||||
M STY 1 6 DAT
|
||||
M SLB 1 6 6
|
||||
M SAL 6 3 40 39 38
|
||||
M SDT 6 fgfh
|
||||
M SDD 6 0.0000 0.0000 DR ALL 1 6
|
||||
M SED 6 relative
|
||||
M STY 1 7 DAT
|
||||
M SLB 1 7 7
|
||||
M SAL 7 3 47 46 45
|
||||
M SDT 7 fgfh
|
||||
M SDD 7 0.0000 -0.0000 DR ALL 1 6
|
||||
M SED 7 attached
|
||||
M STY 1 8 DAT
|
||||
M SLB 1 8 8
|
||||
M SAL 8 15 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
||||
M SAL 8 3 65 66 67
|
||||
M SDT 8 MDLBG_FRAGMENT_STEREO F
|
||||
M SDD 8 6.5461 -2.8188 DR ALL 1 1
|
||||
M SED 8 abs
|
||||
M STY 1 9 DAT
|
||||
M SLB 1 9 9
|
||||
M SPL 1 9 8
|
||||
M SAL 9 15 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
||||
M SAL 9 3 65 66 67
|
||||
M SDT 9 MDLBG_FRAGMENT_COEFFICIENT F
|
||||
M SDD 9 10.1211 -2.9188 DR ALL 1 1
|
||||
M SED 9 3
|
||||
M STY 1 10 DAT
|
||||
M SLB 1 10 10
|
||||
M SPL 1 10 9
|
||||
M SAL 10 1 52
|
||||
M SDT 10 MDLBG_STEREO_KEY F
|
||||
M SDD 10 2.3500 -0.6750 DR ALL 1 1
|
||||
M SED 10 RS
|
||||
M STY 1 11 DAT
|
||||
M SLB 1 11 11
|
||||
M SPL 1 11 9
|
||||
M SAL 11 2 55 67
|
||||
M SDT 11 MDLBG_STEREO_KEY F
|
||||
M SDD 11 2.7411 -1.2437 DR ALL 1 1
|
||||
M SED 11 endo
|
||||
M STY 1 12 DAT
|
||||
M SLB 1 12 12
|
||||
M SPL 1 12 9
|
||||
M SAL 12 2 57 58
|
||||
M SDT 12 MDLBG_STEREO_KEY F
|
||||
M SDD 12 2.7830 -0.9250 DR ALL 1 1
|
||||
M SED 12 trans
|
||||
M END
|
||||
40
static/js/ketcher2/test/index.js
Normal file
40
static/js/ketcher2/test/index.js
Normal file
@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env nodejs
|
||||
/****************************************************************************
|
||||
* Copyright 2017 EPAM Systems
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
***************************************************************************/
|
||||
|
||||
/* eslint-env node */
|
||||
|
||||
var path = require('path');
|
||||
var cp = require('child_process');
|
||||
|
||||
var minimist = require('minimist');
|
||||
|
||||
var opts = process.argv.slice(3);
|
||||
var script = require.resolve(path.join(__dirname, process.argv[2]));
|
||||
var binPath = cp.execSync('npm bin').toString().trim();
|
||||
var tapScript = path.join(binPath, 'tap');
|
||||
|
||||
var filterSpec = {
|
||||
string: ['reporter'],
|
||||
default: { reporter: 'classic' },
|
||||
alias: { reporter: 'R' },
|
||||
unknown: o => filterSpec.string.includes(o)
|
||||
};
|
||||
var filterOpts = minimist(process.argv.slice(3), filterSpec);
|
||||
|
||||
cp.spawn(`node ${script} ${opts.join(' ')} |` +
|
||||
`${tapScript} --reporter=${filterOpts.reporter} -`,
|
||||
{ shell: true, stdio: 'inherit' });
|
||||
57
static/js/ketcher2/test/io/io.js
Normal file
57
static/js/ketcher2/test/io/io.js
Normal file
@ -0,0 +1,57 @@
|
||||
#!/usr/bin/nodejs
|
||||
/****************************************************************************
|
||||
* Copyright 2017 EPAM Systems
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
***************************************************************************/
|
||||
|
||||
/* eslint-env node */
|
||||
|
||||
const path = require('path');
|
||||
const tap = require('tap');
|
||||
|
||||
require('babel-polyfill'); // Needed for padStart, etc (used in "new wave" ketchers)
|
||||
|
||||
const molfile = require(path.join('../..', 'script/chem/molfile'));
|
||||
|
||||
const cols = require('../utils/collections')();
|
||||
|
||||
const molcompare = require('../utils/molcompare');
|
||||
|
||||
function isEquals(expected, actual) {
|
||||
return molcompare.raw(expected, actual, { stripSpaces: true });
|
||||
}
|
||||
|
||||
function runTests(isEqual) {
|
||||
for (let colname of cols.names()) {
|
||||
tap.test(colname, tap => {
|
||||
for (let sample of cols(colname)) {
|
||||
let expected = sample.data;
|
||||
|
||||
let struct = molfile.parse(sample.data, { badHeaderRecover: true });
|
||||
let actual = molfile.stringify(struct);
|
||||
|
||||
if (!expected || !actual)
|
||||
tap.fail(`${colname}/${sample.name} not parsed`);
|
||||
try {
|
||||
tap.ok(isEqual(expected, actual), `${colname}/${sample.name} equals`);
|
||||
} catch (e) {
|
||||
tap.fail(`${colname}/${sample.name} mismatch`, e);
|
||||
}
|
||||
}
|
||||
tap.end();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
runTests(isEquals);
|
||||
70
static/js/ketcher2/test/render/index.js
Normal file
70
static/js/ketcher2/test/render/index.js
Normal file
@ -0,0 +1,70 @@
|
||||
/****************************************************************************
|
||||
* Copyright 2017 EPAM Systems
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
***************************************************************************/
|
||||
|
||||
/* eslint-env node */
|
||||
var ora = require('ora');
|
||||
var tap = require('tap');
|
||||
var istanbul = require('istanbul');
|
||||
|
||||
var libSymbol = require('../utils/library');
|
||||
var cols = require('../utils/collections')();
|
||||
var browserSession = require('../utils/browser-session');
|
||||
|
||||
browserSession((browser, testDir) => {
|
||||
browser = browser.url(`${testDir}/render/render-test.html`);
|
||||
|
||||
for (let colname of cols.names()) {
|
||||
tap.test(colname, t => {
|
||||
for (let name of cols(colname).names()) {
|
||||
let sampleName = `${colname}/${name}`;
|
||||
|
||||
let structStr = cols(colname).fixture(name);
|
||||
let symbol = libSymbol(sampleName); // string Symbol element from `fixtures.svg`
|
||||
|
||||
let opts = {
|
||||
sample: sampleName,
|
||||
width: 600,
|
||||
height: 400
|
||||
};
|
||||
|
||||
let spinner = ora(sampleName);
|
||||
browser.then(() => spinner.start());
|
||||
|
||||
browser = browser
|
||||
.execute(function (structStr, symbol, opts) {
|
||||
window.compareTest(structStr, symbol, opts);
|
||||
}, structStr, symbol, opts)
|
||||
.waitForExist('#cmp')
|
||||
.getHTML('#cmp', false).then(mismatch => {
|
||||
mismatch = mismatch.replace(/Mismatch:\s/, '') - 0;
|
||||
spinner.succeed(`${sampleName} - ${mismatch}`);
|
||||
t.ok(mismatch < 0.5, `${sampleName}`);
|
||||
});
|
||||
}
|
||||
browser.then(() => t.end());
|
||||
});
|
||||
}
|
||||
|
||||
return browser.then(() => {
|
||||
return browser.execute('return window.__coverage__').then(cover => {
|
||||
var reporter = new istanbul.Reporter();
|
||||
var collector = new istanbul.Collector();
|
||||
collector.add(cover.value);
|
||||
reporter.add('html'); // istanbul.Report.getReportList()
|
||||
reporter.write(collector, true, () => null);
|
||||
});
|
||||
});
|
||||
});
|
||||
92
static/js/ketcher2/test/render/render-diff.js
Normal file
92
static/js/ketcher2/test/render/render-diff.js
Normal file
@ -0,0 +1,92 @@
|
||||
/****************************************************************************
|
||||
* Copyright 2017 EPAM Systems
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
***************************************************************************/
|
||||
|
||||
var resemble = require('resemblejs');
|
||||
|
||||
function diff(el1, el2, opts) {
|
||||
console.info("diff", el1, el2);
|
||||
let s = new XMLSerializer();
|
||||
let renderEl = document.body;
|
||||
let can1 = document.createElement('canvas');
|
||||
let can2 = document.createElement('canvas');
|
||||
renderEl.appendChild(can1);
|
||||
renderEl.appendChild(can2);
|
||||
|
||||
let svg1 = el1;
|
||||
setCanvasSizeFromSVG(can1, svg1);
|
||||
let strSvg1 = s.serializeToString(svg1);
|
||||
|
||||
let svg2 = el2;
|
||||
setCanvasSizeFromSVG(can2, svg2);
|
||||
let strSvg2 = s.serializeToString(svg2);
|
||||
|
||||
return Promise.all([
|
||||
drawSVGonCanvas(strSvg1, can1),
|
||||
drawSVGonCanvas(strSvg2, can2)
|
||||
]).then(() => compareCanvas(can1, can2, opts));
|
||||
}
|
||||
|
||||
function setCanvasSizeFromSVG(canvas, svgEl) {
|
||||
svgEl.removeAttribute('style');
|
||||
canvas.width = svgEl.attributes.width.value;
|
||||
canvas.height = svgEl.attributes.height.value;
|
||||
}
|
||||
|
||||
function drawSVGonCanvas(strSVG, canvas) {
|
||||
return new Promise((res, rej) => {
|
||||
let img = new Image();
|
||||
img.onload = () => {
|
||||
canvas.getContext('2d').drawImage(img, 0, 0);
|
||||
res();
|
||||
};
|
||||
img.onerror = () => rej();
|
||||
img.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(strSVG);
|
||||
});
|
||||
}
|
||||
|
||||
/** opts: {
|
||||
errorColor: {red: int, green: int, blue: int},
|
||||
errorType: 'flat' || 'movement' || 'flatDifferenceIntensity' || 'movementDifferenceIntensity',
|
||||
transparency: 0<= x <=1,
|
||||
largeImageThreshold: !== undefined,
|
||||
useCrossOrigin: !== undefined
|
||||
}
|
||||
opts.methods: [
|
||||
'ignoreColors' || 'ignoreNothing' || 'ignoreAntialiasing' || 'scaleToSameSize'
|
||||
'scaleToSameSize' || 'useOriginalSize'
|
||||
]
|
||||
*/
|
||||
function compareCanvas(c1, c2, opts) {
|
||||
let cmp = resemble(c1.toDataURL('image/png'))
|
||||
.compareTo(c2.toDataURL('image/png'));
|
||||
|
||||
resemble.outputSettings(opts || {});
|
||||
|
||||
if (opts.methods)
|
||||
for (let method of opts.methods) cmp = cmp[method]();
|
||||
|
||||
c1.remove(); c2.remove();
|
||||
return Promise.resolve(cmp.onComplete(opts.onComplete));
|
||||
}
|
||||
|
||||
function changeOutputOpts(opts) {
|
||||
resemble.outputSettings(opts);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
diff,
|
||||
changeOutputOpts
|
||||
};
|
||||
6
static/js/ketcher2/test/render/render-test.html
Normal file
6
static/js/ketcher2/test/render/render-test.html
Normal file
@ -0,0 +1,6 @@
|
||||
<!DOCTYPE html>
|
||||
<title>Render Test</title>
|
||||
<script src="../../node_modules/raphael/raphael.js"></script>
|
||||
<script src="../../node_modules/resemblejs/resemble.js"></script>
|
||||
|
||||
<script src="../dist/render-test.js"></script>
|
||||
121
static/js/ketcher2/test/render/render-test.js
Normal file
121
static/js/ketcher2/test/render/render-test.js
Normal file
@ -0,0 +1,121 @@
|
||||
/****************************************************************************
|
||||
* Copyright 2017 EPAM Systems
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
***************************************************************************/
|
||||
|
||||
var renderDiff = require('./render-diff').diff;
|
||||
var Render = require('../../script/render');
|
||||
|
||||
var ketcher = {
|
||||
molfile: require('../../script/chem/molfile'),
|
||||
render: function render(el, struct, opts) {
|
||||
var render = new Render(el, opts);
|
||||
render.setMolecule(struct);
|
||||
render.update();
|
||||
}
|
||||
};
|
||||
|
||||
var defaultOpts = {
|
||||
width: 600,
|
||||
height: 400,
|
||||
render: {
|
||||
bondLength: 75,
|
||||
showSelectionRegions: false,
|
||||
showBondIds: false,
|
||||
showHalfBondIds: false,
|
||||
showLoopIds: false,
|
||||
showAtomIds: false,
|
||||
autoScale: true,
|
||||
autoScaleMargin: 4,
|
||||
hideImplicitHydrogen: false,
|
||||
hideChiralFlag: true
|
||||
}
|
||||
};
|
||||
|
||||
function createStyle(style) {
|
||||
return Object.keys(style).reduce((str, prop) => {
|
||||
var value = style[prop];
|
||||
if (typeof value == 'object')
|
||||
return str;
|
||||
if (typeof value == 'number' || typeof value == 'string')
|
||||
value += 'px';
|
||||
return str += `${prop}: ${value};`;
|
||||
}, '');
|
||||
}
|
||||
|
||||
function createEl(name, opts, parent) {
|
||||
var [tag, id] = name.split('#');
|
||||
var el = document.createElement(tag || 'div');
|
||||
if (id)
|
||||
el.id = id;
|
||||
el.style = createStyle(opts);
|
||||
(parent || document.body).appendChild(el);
|
||||
return el;
|
||||
}
|
||||
|
||||
function ketcherRender(structStr, options) {
|
||||
let opts = Object.assign({}, defaultOpts, options);
|
||||
var target = createEl('#canvas-ketcher', opts);
|
||||
var struct = ketcher.molfile.parse(structStr);
|
||||
ketcher.render(target, struct, opts.render);
|
||||
return target.firstElementChild;
|
||||
}
|
||||
|
||||
function symbolRender(symbolStr) {
|
||||
const symbol = new DOMParser().parseFromString(symbolStr, "application/xml").firstElementChild;
|
||||
|
||||
let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
||||
for (let attr of symbol.attributes)
|
||||
svg.setAttribute(attr.name, attr.value);
|
||||
svg.innerHTML = symbol.innerHTML;
|
||||
|
||||
return svg;
|
||||
}
|
||||
|
||||
function renderTest(structStr, opts) {
|
||||
document.body.innerHTML = '';
|
||||
return ketcherRender(structStr, opts);
|
||||
}
|
||||
|
||||
function compareTest(structStr, symbolStr, opts) {
|
||||
console.info('sample', opts.sample);
|
||||
|
||||
document.body.innerHTML = '';
|
||||
|
||||
var renderOpts = {
|
||||
onComplete: function (diff) {
|
||||
document.body.innerHTML = '';
|
||||
var diffImage = new Image();
|
||||
diffImage.src = diff.getImageDataUrl();
|
||||
|
||||
document.body.appendChild(diffImage);
|
||||
createEl('output#cmp', {
|
||||
color: 'green'
|
||||
}).innerHTML = `Mismatch: ${diff.misMatchPercentage}`;
|
||||
},
|
||||
methods: ['ignoreAntialiasing', 'useOriginalSize']
|
||||
};
|
||||
|
||||
var cmp = renderDiff(
|
||||
ketcherRender(structStr, opts),
|
||||
symbolRender(symbolStr),
|
||||
renderOpts);
|
||||
|
||||
cmp.then(function () {
|
||||
console.info('Cmp complete');
|
||||
});
|
||||
}
|
||||
|
||||
window.renderTest = renderTest;
|
||||
window.compareTest = compareTest;
|
||||
60
static/js/ketcher2/test/utils/browser-session.js
Normal file
60
static/js/ketcher2/test/utils/browser-session.js
Normal file
@ -0,0 +1,60 @@
|
||||
/****************************************************************************
|
||||
* Copyright 2017 EPAM Systems
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
***************************************************************************/
|
||||
|
||||
/* eslint-env node */
|
||||
|
||||
var webdriverio = require('webdriverio');
|
||||
var chromedriver = require('chromedriver');
|
||||
|
||||
var path = require('path');
|
||||
var minimist = require('minimist');
|
||||
|
||||
var options = minimist(process.argv.slice(2), {
|
||||
string: ['dist'],
|
||||
boolean: ['headless'],
|
||||
default: {
|
||||
headless: implicitHeadless(),
|
||||
dist: 'dist'
|
||||
}
|
||||
});
|
||||
|
||||
function implicitHeadless() {
|
||||
return process.platform != 'win32' && process.platform != 'darwin' &&
|
||||
!process.env.DISPLAY;
|
||||
}
|
||||
|
||||
function startSession(session) {
|
||||
// an variant of https://git.io/vQ8o7
|
||||
chromedriver.start(['--url-base=wd/hub']);
|
||||
|
||||
var browser = webdriverio.remote({
|
||||
port: 9515, // TODO: autochoose choose unused port
|
||||
desiredCapabilities: {
|
||||
browserName: 'chrome',
|
||||
chromeOptions: options.headless ? {
|
||||
// see: https://goo.gl/ypWDst
|
||||
args: ['--headless', '--disable-gpu']
|
||||
} : {}
|
||||
}
|
||||
}).init().url('about:blank');
|
||||
|
||||
browser.on('error', (e) => console.error(e));
|
||||
|
||||
let br = session(browser, path.join(__dirname, '..')) || browser; // test dir
|
||||
br.end().then(() => chromedriver.stop());
|
||||
}
|
||||
|
||||
module.exports = startSession;
|
||||
111
static/js/ketcher2/test/utils/collections.js
Normal file
111
static/js/ketcher2/test/utils/collections.js
Normal file
@ -0,0 +1,111 @@
|
||||
/****************************************************************************
|
||||
* Copyright 2017 EPAM Systems
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
***************************************************************************/
|
||||
|
||||
/* eslint-env node */
|
||||
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
var minimist = require('minimist');
|
||||
|
||||
var options = minimist(process.argv.slice(2), {
|
||||
string: ['fixtures'],
|
||||
default: {
|
||||
fixtures: 'fixtures'
|
||||
}
|
||||
});
|
||||
|
||||
function collect(items, base) {
|
||||
var res = [];
|
||||
var structfiles = [];
|
||||
for (var fn of items) {
|
||||
var fpath = path.join(base || '', fn);
|
||||
if (fs.statSync(fpath).isDirectory())
|
||||
res = res.concat(collect(fs.readdirSync(fpath), fpath));
|
||||
else if (path.extname(fn) == '.sdf')
|
||||
res.push(sdfCollect(fpath));
|
||||
else if (!!base && ['.mol', '.rxn'].indexOf(path.extname(fn)) != -1)
|
||||
structfiles.push(fn);
|
||||
}
|
||||
if (structfiles.length > 0) {
|
||||
res.push({
|
||||
name: path.basename(base),
|
||||
path: base,
|
||||
type: 'folder',
|
||||
files: structfiles
|
||||
});
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
function sdfCollect(fpath) {
|
||||
var data = fs.readFileSync(fpath, 'utf8');
|
||||
return {
|
||||
name: path.basename(fpath),
|
||||
path: fpath,
|
||||
type: 'sdf',
|
||||
count: data.split(/\$\$\$\$/).length
|
||||
};
|
||||
}
|
||||
|
||||
function* iterate(col) {
|
||||
if (col.type == 'folder') {
|
||||
for (var fn of col.files) {
|
||||
yield {
|
||||
name: fn,
|
||||
data: fs.readFileSync(path.join(col.path, fn), 'utf8')
|
||||
};
|
||||
}
|
||||
} else {
|
||||
var sdf = fs.readFileSync(col.path, 'utf8');
|
||||
var re = /^\$\$\$\$\n/gm;
|
||||
for (var m, i, num = 0; i = re.lastIndex, m = re.exec(sdf); num++) {
|
||||
yield {
|
||||
name: num,
|
||||
data: sdf.slice(i, m.index)
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function range(n, start) {
|
||||
start = start || 0;
|
||||
return Array.apply(null, {
|
||||
length: n - start
|
||||
}).map((_, i) => i + start);
|
||||
}
|
||||
|
||||
function collection(collections, name) {
|
||||
var col = collections.find(c => c.name == name);
|
||||
return Object.assign(iterate(col), col.type == 'folder' ? {
|
||||
names: () => col.files,
|
||||
fixture: id => fs.readFileSync(path.join(col.path, id), 'utf8')
|
||||
} : {
|
||||
names: () => range(col.count - 1),
|
||||
fixture: id => {
|
||||
var data = fs.readFileSync(col.path, 'utf8');
|
||||
return data.split(/\$\$\$\$/m, id + 1)[id - 0].trim();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = function (colPath) {
|
||||
if (!colPath) colPath = path.join('test/', options.fixtures);
|
||||
var cols = collect(Array.isArray(colPath) ? colPath : [colPath]);
|
||||
return Object.assign(collection.bind(null, cols), {
|
||||
names: () => cols.map(c => c.name)
|
||||
});
|
||||
};
|
||||
62
static/js/ketcher2/test/utils/generate-svg.js
Normal file
62
static/js/ketcher2/test/utils/generate-svg.js
Normal file
@ -0,0 +1,62 @@
|
||||
/****************************************************************************
|
||||
* Copyright 2017 EPAM Systems
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
***************************************************************************/
|
||||
|
||||
/* eslint-env node */
|
||||
|
||||
var fs = require('fs');
|
||||
|
||||
var ora = require('ora');
|
||||
var svgstore = require('svgstore');
|
||||
|
||||
var cols = require('./collections')();
|
||||
var browserSession = require('./browser-session');
|
||||
|
||||
browserSession((browser, testDir) => {
|
||||
browser = browser.url(`${testDir}/render/render-test.html`);
|
||||
|
||||
var sprites = svgstore({
|
||||
copyAttrs: ['width', 'height', 'preserveAspectRatio']
|
||||
});
|
||||
|
||||
for (var colname of cols.names()) {
|
||||
for (var name of cols(colname).names()) {
|
||||
let sampleName = `${colname}/${name}`;
|
||||
let structStr = cols(colname).fixture(name);
|
||||
|
||||
let opts = {
|
||||
sample: sampleName,
|
||||
width: 600,
|
||||
height: 400
|
||||
};
|
||||
let spinner = ora(sampleName);
|
||||
browser.then(() => spinner.start());
|
||||
browser = browser
|
||||
.execute(function (structStr, opts) {
|
||||
window.renderTest(structStr, opts);
|
||||
}, structStr, opts)
|
||||
.waitForExist('#canvas-ketcher')
|
||||
.getHTML('#canvas-ketcher', false).then(svg => {
|
||||
// console.info(sampleName, svg.replace(/.*(viewBox=".+?").*/, "$1"));
|
||||
sprites.add(sampleName, svg);
|
||||
spinner.succeed();
|
||||
});
|
||||
}
|
||||
}
|
||||
return browser.then(() => {
|
||||
// TODO should it be cmd arg?
|
||||
fs.writeFileSync('test/fixtures/fixtures.svg', sprites);
|
||||
});
|
||||
});
|
||||
34
static/js/ketcher2/test/utils/library.js
Normal file
34
static/js/ketcher2/test/utils/library.js
Normal file
@ -0,0 +1,34 @@
|
||||
/****************************************************************************
|
||||
* Copyright 2017 EPAM Systems
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
***************************************************************************/
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const xpath = require('xpath');
|
||||
const DOMParser = require('xmldom').DOMParser;
|
||||
const XMLSerializer = require('xmldom').XMLSerializer;
|
||||
|
||||
let libStr = fs.readFileSync(path.join(__dirname, '../fixtures/fixtures.svg')).toString();
|
||||
let library = new DOMParser().parseFromString(libStr);
|
||||
|
||||
function libSymbol(sampleName) {
|
||||
let xsym = xpath.evaluate(`//*[@id='${sampleName}']`, library, // ids with '/' are absolutely valid, see https://epa.ms/SGNMm
|
||||
null, xpath.XPathResult.FIRST_ORDERED_NODE_TYPE, null);
|
||||
let symbol = xsym.singleNodeValue;
|
||||
return new XMLSerializer().serializeToString(symbol);
|
||||
}
|
||||
|
||||
module.exports = libSymbol;
|
||||
138
static/js/ketcher2/test/utils/molcompare.js
Normal file
138
static/js/ketcher2/test/utils/molcompare.js
Normal file
@ -0,0 +1,138 @@
|
||||
/****************************************************************************
|
||||
* Copyright 2017 EPAM Systems
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
***************************************************************************/
|
||||
|
||||
'use strict';
|
||||
|
||||
const defaultCmpOptions = {
|
||||
stripSpaces: false,
|
||||
skipCompare: [],
|
||||
eps: 0.00011
|
||||
};
|
||||
|
||||
const numberPattern = /-?\d+[\.,]?\d*/g;
|
||||
|
||||
function epsEqu(x, y, eps) {
|
||||
eps = eps || Number.EPSILON * Math.max(Math.abs(x), Math.abs(y));
|
||||
return Math.abs(x - y) <= eps;
|
||||
}
|
||||
|
||||
function arraysEquals(sArray, rArray, eqFunc) {
|
||||
return sArray === rArray ||
|
||||
(
|
||||
sArray.length === rArray.length &&
|
||||
sArray.every((elem, index) => eqFunc ? eqFunc(elem, rArray[index]) : elem === rArray[index])
|
||||
);
|
||||
}
|
||||
|
||||
function extractNumbers(source) {
|
||||
const matches = source.match(numberPattern);
|
||||
return {
|
||||
numbers: matches ? matches.map(parseFloat) : [],
|
||||
characters: source.replace(numberPattern, '').split(/\s+/)
|
||||
};
|
||||
}
|
||||
|
||||
function compareFile(source, dest, options) {
|
||||
const sourceStr = source.split(/\r?\n+/);
|
||||
const destStr = dest.split(/\r?\n+/);
|
||||
|
||||
for (var i = 0; i < sourceStr.length; i++) {
|
||||
if (options.stripSpaces) {
|
||||
sourceStr[i] = sourceStr[i].trim();
|
||||
destStr[i] = destStr[i].trim();
|
||||
}
|
||||
|
||||
const sDataSplitted = extractNumbers(sourceStr[i]);
|
||||
const rDataSplitted = extractNumbers(destStr[i]);
|
||||
|
||||
const numberEquals = arraysEquals(sDataSplitted.numbers, rDataSplitted.numbers, (x, y) => epsEqu(x, y, options.eps));
|
||||
const characterEquals = arraysEquals(sDataSplitted.characters, rDataSplitted.characters);
|
||||
|
||||
if (!numberEquals || !characterEquals)
|
||||
throw new Error(`\nsource: '${sourceStr[i]}'\ndest: '${destStr[i]}'`);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function compareRaw(source, dest, options) {
|
||||
const sDataMols = source.split('M END');
|
||||
const rDataMols = dest.split('M END');
|
||||
let newSdata, newRdata;
|
||||
|
||||
if (sDataMols.length !== rDataMols.length)
|
||||
throw new Error(`\nCount of content blocks are not equal: source = ${sDataMols.length}, dest = ${rDataMols.length}`);
|
||||
|
||||
options = Object.assign({}, defaultCmpOptions, options);
|
||||
|
||||
for (let i = 0; i < sDataMols.length - 1; i++) {
|
||||
const sV2000DataIndex = sDataMols[i].indexOf('V2000\n');
|
||||
const sV3000DataIndex = sDataMols[i].indexOf('V3000\n');
|
||||
|
||||
const rV2000DataIndex = rDataMols[i].indexOf('V2000\n');
|
||||
const rV3000DataIndex = rDataMols[i].indexOf('V3000\n');
|
||||
|
||||
newSdata = sDataMols[i].substring(6 + (sV3000DataIndex === -1 ? sV2000DataIndex : sV3000DataIndex));
|
||||
newRdata = rDataMols[i].substring(6 + (rV3000DataIndex === -1 ? rV2000DataIndex : rV3000DataIndex));
|
||||
|
||||
if (!compareFile(newSdata, newRdata, options))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function compareObjects(source, dest, options, parentKey) {
|
||||
if (typeof source !== typeof dest)
|
||||
throw new Error(`\ntypes not equal: type ${typeof source} of ${source} vs type ${typeof dest} of ${dest} in ${parentKey}`);
|
||||
|
||||
if (typeof source !== 'object')
|
||||
return source === dest;
|
||||
|
||||
return Object.keys(source)
|
||||
.filter(prop => !options.skipCompare.includes(prop))
|
||||
.every(key => {
|
||||
if (dest[key] === undefined)
|
||||
throw new Error(`\nDest object has no key ${key}`);
|
||||
|
||||
if (!compareObjects(source[key], dest[key], options, key))
|
||||
throw new Error(`\nsource: '${source[key]}'\ndest: '${dest[key]}' in ${key}`);
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
function unicodeLiteral(str) {
|
||||
function fixedHex(number, length) {
|
||||
let str = number.toString(16).toUpperCase();
|
||||
while (str.length < length)
|
||||
str = "0" + str;
|
||||
return str;
|
||||
}
|
||||
let result = "";
|
||||
for (var i = 0; i < str.length; ++i) {
|
||||
if (str.charCodeAt(i) > 126 || str.charCodeAt(i) < 32)
|
||||
result += "\\u" + fixedHex(str.charCodeAt(i), 4);
|
||||
else
|
||||
result += str[i];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
raw: compareRaw,
|
||||
objects: compareObjects,
|
||||
unicodeLiteral: unicodeLiteral
|
||||
};
|
||||
Reference in New Issue
Block a user