From 1ca103f6fb44e546028adc5c3b8bb3bcd9d113f5 Mon Sep 17 00:00:00 2001
From: Zepei Xu <xuzepei19950617@gmail.com>
Date: Thu, 5 Oct 2017 18:49:58 -0700
Subject: [PATCH] added unit tests, made some notes

---
 src/reader/mol2/parser.ts    | 11 ++++++
 src/reader/mol2/schema.d.ts  |  1 +
 src/reader/spec/mol2.spec.ts | 67 ++++++++++++++++++++++++++++++++++++
 3 files changed, 79 insertions(+)
 create mode 100644 src/reader/spec/mol2.spec.ts

diff --git a/src/reader/mol2/parser.ts b/src/reader/mol2/parser.ts
index b63939f64..035f1f5da 100644
--- a/src/reader/mol2/parser.ts
+++ b/src/reader/mol2/parser.ts
@@ -6,6 +6,17 @@ import Result from '../result'
 import Computation from '../../utils/computation' ////////// not using this
 
 
+/*////////////////////////// NOTES //////////////////////////////
+    Not using async, wait, promises, computation, chunker.
+    Formatting is not clear, different exmaples mol2 files has different field sizes, so making
+columns using col() is not possible. Need to implement checks for optional columns, but not clear 
+about the names of each entry in a row in the example files.
+    Don't know when to use str and when to use pooledStr
+    Unlike gro file, mol2 file don't save 'hasSomthing' properties in the header-like Molecule 
+///////////////////////////////////////////////////////////////*/
+
+
+
 
 interface State {
     tokenizer: Tokenizer,
diff --git a/src/reader/mol2/schema.d.ts b/src/reader/mol2/schema.d.ts
index 7f1e73fb2..a34dc9f9e 100644
--- a/src/reader/mol2/schema.d.ts
+++ b/src/reader/mol2/schema.d.ts
@@ -25,6 +25,7 @@ export interface Molecule {
     charge_type: string
     status_bits: string
     mol_comment: string
+    ///////////// precisions are not saved for later use, and there is not 'hasSomthing' properties 
 }
 
 export interface Atoms {
diff --git a/src/reader/spec/mol2.spec.ts b/src/reader/spec/mol2.spec.ts
new file mode 100644
index 000000000..675f41a69
--- /dev/null
+++ b/src/reader/spec/mol2.spec.ts
@@ -0,0 +1,67 @@
+
+
+import Mol2 from '../mol2/parser'
+
+const Mol2String = `@<TRIPOS>MOLECULE
+5816
+ 26 26 0 0 0
+SMALL
+GASTEIGER
+
+@<TRIPOS>ATOM
+      1 O           1.7394   -2.1169   -1.0894 O.3     1  LIG1       -0.3859
+      2 O          -2.2941    1.0781   -1.7979 O.3     1  LIG1       -0.5033
+@<TRIPOS>BOND
+     1     1     5    1
+     2     1    21    1`
+
+
+////////// nothing works until add async and await and promise to parser.mol2 file.
+describe('mol2 reader', () => {
+    it('basic', async () => {
+        const parsed = await Mol2(Mol2String)();
+
+        if (parsed.isError) {
+            console.log(parsed)
+            return;
+        }
+
+        const mol2File = parsed.result;
+        const data = mol2File.structures[0];
+
+        const { molecule, atoms, bonds } = data;
+
+        expect(molecule.mol_name).toBe(5816)
+        expect(molecule.num_atoms).toBe(26)
+        expect(molecule.num_bonds).toBe(26);
+        expect(molecule.num_subst).toBe(0);
+        expect(molecule.num_feat).toBe(0);
+        expect(molecule.num_sets).toBe(0);
+        expect(molecule.mol_type).toBe("")
+        expect(molecule.charge_type).toBe("");
+        expect(molecule.status_bits).toBe("");
+        expect(molecule.mol_comment).toBe("");
+
+        expect(atoms.count).toBe(2);
+        expect(atoms.atom_id.value(0)).toBe(1);
+        expect(atoms.atom_name.value(0)).toBe('o');
+        expect(atoms.x.value(0)).toBeCloseTo(1.7394, 0.001);
+        expect(atoms.y.value(0)).toBeCloseTo(-2.1169, 0.0001);
+        expect(atoms.z.value(0)).toBeCloseTo(-1.0893, 0.0001);
+        expect(atoms.atom_type.value(0)).toBe('');
+        ///// optionals
+        expect(atoms.subst_id.value(0)).toBe(0);
+        expect(atoms.subst_name.value(0)).toBe('');
+        expect(atoms.charge.value(0)).toBeCloseTo(0.000);
+        expect(atoms.status_bits.value(0)).toBe('');
+
+        expect(bonds.count).toBe(2);
+        expect(bonds.bond_id.value(0)).toBe(1);
+        expect(bonds.origin_atom_id.value(0)).toBe(1);
+        expect(bonds.target_atom_id.value(0)).toBe(5);
+        expect(bonds.bond_type.value(0)).toBe('1');
+        /////// optional
+        expect(bonds.status_bits.value(0)).toBe('');
+
+    });
+});
-- 
GitLab