1# @file    TestWriteL3SBML.rb
2# @brief   Write SBML unit tests
3#
4# @author  Akiya Jouraku (Ruby conversion)
5# @author  Sarah Keating
6#
7#
8# ====== WARNING ===== WARNING ===== WARNING ===== WARNING ===== WARNING ======
9#
10# DO NOT EDIT THIS FILE.
11#
12# This file was generated automatically by converting the file located at
13# src/sbml/test/TestWriteL3SBML.cpp
14# using the conversion program dev/utilities/translateTests/translateTests.pl.
15# Any changes made here will be lost the next time the file is regenerated.
16#
17# -----------------------------------------------------------------------------
18# This file is part of libSBML.  Please visit http://sbml.org for more
19# information about SBML, and the latest version of libSBML.
20#
21# Copyright 2005-2010 California Institute of Technology.
22# Copyright 2002-2005 California Institute of Technology and
23#                     Japan Science and Technology Corporation.
24#
25# This library is free software; you can redistribute it and/or modify it
26# under the terms of the GNU Lesser General Public License as published by
27# the Free Software Foundation.  A copy of the license agreement is provided
28# in the file named "LICENSE.txt" included with this software distribution
29# and also available online as http://sbml.org/software/libsbml/license.html
30# -----------------------------------------------------------------------------
31require 'test/unit'
32require 'libSBML'
33
34class TestWriteL3SBML < Test::Unit::TestCase
35
36  def LV_L3v1
37    return "level=\"3\" version=\"1\">\n"
38  end
39
40  def NS_L3v1
41    return "xmlns=\"http://www.sbml.org/sbml/level3/version1/core\" "
42  end
43
44  def SBML_END
45    return "</sbml>\n"
46  end
47
48  def SBML_START
49    return "<sbml "
50  end
51
52  def XML_START
53    return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
54  end
55
56  def wrapSBML_L3v1(s)
57    r = XML_START()
58    r += SBML_START()
59    r += NS_L3v1()
60    r += LV_L3v1()
61    r += s
62    r += SBML_END()
63    return r
64  end
65
66  def wrapXML(s)
67    r = XML_START()
68    r += s
69    return r
70  end
71
72  def util_NaN
73    z = 0.0
74    return 0.0/z
75  end
76
77  def util_PosInf
78    z = 0.0
79    return 1.0/z
80  end
81
82  def util_NegInf
83    z = 0.0
84    return -1.0/z
85  end
86
87  def equals(*x)
88    case x.size
89    when 2
90      e, s = x
91      return e == s
92    when 1
93      e, = x
94      return e == @@oss.str()
95    end
96  end
97
98  def setup
99    @@d = LibSBML::SBMLDocument.new()
100    @@d.setLevelAndVersion(3,1,false)
101    @@s = nil
102  end
103
104  def teardown
105    @@d = nil
106    @@s = nil
107  end
108
109  def test_SBMLWriter_L3_create
110    w = LibSBML::SBMLWriter.new()
111    assert( w != nil )
112    w = nil
113  end
114
115  def test_SBMLWriter_L3_setProgramName
116    w = LibSBML::SBMLWriter.new()
117    assert( w != nil )
118    i = w.setProgramName( "sss")
119    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
120    i = w.setProgramName("")
121    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
122    w = nil
123  end
124
125  def test_SBMLWriter_L3_setProgramVersion
126    w = LibSBML::SBMLWriter.new()
127    assert( w != nil )
128    i = w.setProgramVersion( "sss")
129    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
130    i = w.setProgramVersion("")
131    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
132    w = nil
133  end
134
135  def test_WriteL3SBML_Compartment
136    expected =  "<compartment id=\"A\" constant=\"true\"/>";
137    c = @@d.createModel().createCompartment()
138    c.setId("A")
139    c.setConstant(true)
140    assert_equal true, equals(expected,c.toSBML())
141  end
142
143  def test_WriteL3SBML_Compartment_spatialDimensions
144    expected = "<compartment id=\"A\" spatialDimensions=\"2.1\" " + "constant=\"false\"/>";
145    expected1 =  "<compartment id=\"A\" constant=\"false\"/>";
146    c = @@d.createModel().createCompartment()
147    c.setId("A")
148    c.setConstant(false)
149    c.setSpatialDimensions(2.1)
150    assert_equal true, equals(expected,c.toSBML())
151    c.unsetSpatialDimensions()
152    assert_equal true, equals(expected1,c.toSBML())
153  end
154
155  def test_WriteL3SBML_Event
156    expected =  "<event id=\"e\" useValuesFromTriggerTime=\"true\"/>";
157    e = @@d.createModel().createEvent()
158    e.setId("e")
159    e.setUseValuesFromTriggerTime(true)
160    assert_equal true, equals(expected,e.toSBML())
161  end
162
163  def test_WriteL3SBML_Event_full
164    expected = "<event useValuesFromTriggerTime=\"true\">\n" +
165    "  <trigger initialValue=\"true\" persistent=\"false\">\n" +
166    "    <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n" +
167    "      <true/>\n" +
168    "    </math>\n" +
169    "  </trigger>\n" +
170    "  <priority>\n" +
171    "    <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n" +
172    "      <cn type=\"integer\"> 2 </cn>\n" +
173    "    </math>\n" +
174    "  </priority>\n" +
175    "</event>"
176    e = @@d.createModel().createEvent()
177    e.setUseValuesFromTriggerTime(true)
178    t = e.createTrigger()
179    t.setInitialValue(true)
180    t.setPersistent(false)
181    math1 = LibSBML::parseFormula("true")
182    t.setMath(math1)
183    p = e.createPriority()
184    math2 = LibSBML::parseFormula("2")
185    p.setMath(math2)
186    assert_equal true, equals(expected,e.toSBML())
187  end
188
189  def test_WriteL3SBML_Event_useValues
190    expected = "<event id=\"e\" useValuesFromTriggerTime=\"false\">\n" +
191    "  <delay/>\n" +
192    "</event>"
193    e = @@d.createModel().createEvent()
194    e.setId("e")
195    e.setUseValuesFromTriggerTime(false)
196    e.createDelay()
197    assert_equal true, equals(expected,e.toSBML())
198  end
199
200  def test_WriteL3SBML_INF
201    expected = "<parameter id=\"p\" value=\"INF\"" + " constant=\"true\"/>";
202    p = @@d.createModel().createParameter()
203    p.setId("p")
204    p.setValue(util_PosInf())
205    p.setConstant(true)
206    assert_equal true, equals(expected,p.toSBML())
207  end
208
209  def test_WriteL3SBML_KineticLaw_ListOfParameters
210    expected = "<kineticLaw>\n" +
211    "  <listOfLocalParameters>\n" +
212    "    <localParameter id=\"n\" value=\"1.2\"/>\n" +
213    "  </listOfLocalParameters>\n" +
214    "</kineticLaw>"
215    kl = @@d.createModel().createReaction().createKineticLaw()
216    p = kl.createLocalParameter()
217    p.setId("n")
218    p.setValue(1.2)
219    assert_equal true, equals(expected,kl.toSBML())
220  end
221
222  def test_WriteL3SBML_Model
223    expected = wrapSBML_L3v1("  <model/>\n"
224    )
225    m = @@d.createModel("")
226    @@s = LibSBML::writeSBMLToString(@@d)
227    assert_equal true, equals(expected,@@s)
228  end
229
230  def test_WriteL3SBML_Model_conversionFactor
231    expected = wrapSBML_L3v1("  <model conversionFactor=\"p\"/>\n"
232    )
233    m = @@d.createModel("")
234    m.setConversionFactor("p")
235    @@s = LibSBML::writeSBMLToString(@@d)
236    assert_equal true, equals(expected,@@s)
237  end
238
239  def test_WriteL3SBML_Model_otherUnits
240    expected = wrapSBML_L3v1("  <model volumeUnits=\"litre\" areaUnits=\"area\" lengthUnits=\"metre\"/>\n"
241    )
242    m = @@d.createModel("")
243    m.setVolumeUnits("litre")
244    m.setAreaUnits("area")
245    m.setLengthUnits("metre")
246    @@s = LibSBML::writeSBMLToString(@@d)
247    assert_equal true, equals(expected,@@s)
248  end
249
250  def test_WriteL3SBML_Model_substanceUnits
251    expected = wrapSBML_L3v1("  <model substanceUnits=\"mole\"/>\n"
252    )
253    m = @@d.createModel("")
254    m.setSubstanceUnits("mole")
255    @@s = LibSBML::writeSBMLToString(@@d)
256    assert_equal true, equals(expected,@@s)
257  end
258
259  def test_WriteL3SBML_Model_timeUnits
260    expected = wrapSBML_L3v1("  <model timeUnits=\"second\"/>\n"
261    )
262    m = @@d.createModel("")
263    m.setTimeUnits("second")
264    @@s = LibSBML::writeSBMLToString(@@d)
265    assert_equal true, equals(expected,@@s)
266  end
267
268  def test_WriteL3SBML_NaN
269    expected = "<parameter id=\"p\" value=\"NaN\"" + " constant=\"true\"/>";
270    p = @@d.createModel().createParameter()
271    p.setId("p")
272    p.setValue(util_NaN())
273    p.setConstant(true)
274    assert_equal true, equals(expected,p.toSBML())
275  end
276
277  def test_WriteL3SBML_NegINF
278    expected = "<parameter id=\"p\" value=\"-INF\"" + " constant=\"true\"/>";
279    p = @@d.createModel().createParameter()
280    p.setId("p")
281    p.setValue(util_NegInf())
282    p.setConstant(true)
283    assert_equal true, equals(expected,p.toSBML())
284  end
285
286  def test_WriteL3SBML_Parameter
287    expected = "<parameter id=\"Km1\" value=\"2.3\"" + " units=\"second\" constant=\"true\"/>";
288    p = @@d.createModel().createParameter()
289    p.setId("Km1")
290    p.setValue(2.3)
291    p.setUnits("second")
292    p.setConstant(true)
293    assert_equal true, equals(expected,p.toSBML())
294  end
295
296  def test_WriteL3SBML_Priority
297    expected =  "<priority/>";
298    p = @@d.createModel().createEvent().createPriority()
299    assert_equal true, equals(expected,p.toSBML())
300  end
301
302  def test_WriteL3SBML_Reaction
303    expected = "<reaction id=\"r\" reversible=\"false\"" + " fast=\"true\"/>";
304    r = @@d.createModel().createReaction()
305    r.setId("r")
306    r.setReversible(false)
307    r.setFast(true)
308    assert_equal true, equals(expected,r.toSBML())
309  end
310
311  def test_WriteL3SBML_Reaction_compartment
312    expected = "<reaction id=\"r\" reversible=\"false\"" + " fast=\"true\" compartment=\"c\"/>";
313    expected1 = "<reaction id=\"r\" reversible=\"false\"" + " fast=\"true\"/>";
314    r = @@d.createModel().createReaction()
315    r.setId("r")
316    r.setReversible(false)
317    r.setFast(true)
318    r.setCompartment("c")
319    assert_equal true, equals(expected,r.toSBML())
320    r.unsetCompartment()
321    assert_equal true, equals(expected1,r.toSBML())
322  end
323
324  def test_WriteL3SBML_Reaction_full
325    expected = "<reaction id=\"v1\" reversible=\"true\" fast=\"false\">\n" +
326    "  <listOfReactants>\n" +
327    "    <speciesReference species=\"x0\"/>\n" +
328    "  </listOfReactants>\n" +
329    "  <listOfProducts>\n" +
330    "    <speciesReference species=\"s1\"/>\n" +
331    "  </listOfProducts>\n" +
332    "  <listOfModifiers>\n" +
333    "    <modifierSpeciesReference species=\"m1\"/>\n" +
334    "  </listOfModifiers>\n" +
335    "  <kineticLaw>\n" +
336    "    <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n" +
337    "      <apply>\n" +
338    "        <divide/>\n" +
339    "        <apply>\n" +
340    "          <times/>\n" +
341    "          <ci> vm </ci>\n" +
342    "          <ci> s1 </ci>\n" +
343    "        </apply>\n" +
344    "        <apply>\n" +
345    "          <plus/>\n" +
346    "          <ci> km </ci>\n" +
347    "          <ci> s1 </ci>\n" +
348    "        </apply>\n" +
349    "      </apply>\n" +
350    "    </math>\n" +
351    "  </kineticLaw>\n" +
352    "</reaction>"
353    @@d.createModel()
354    r = @@d.getModel().createReaction()
355    r.setId("v1")
356    r.setReversible(true)
357    r.setFast(false)
358    r.createReactant().setSpecies("x0")
359    r.createProduct().setSpecies("s1")
360    r.createModifier().setSpecies("m1")
361    r.createKineticLaw().setFormula("(vm * s1)/(km + s1)")
362    assert_equal true, equals(expected,r.toSBML())
363  end
364
365  def test_WriteL3SBML_SBMLDocument_L3v1
366    expected = wrapXML("<sbml xmlns=\"http://www.sbml.org/sbml/level3/version1/core\" " + "level=\"3\" version=\"1\"/>\n")
367    @@s = LibSBML::writeSBMLToString(@@d)
368    assert_equal true, equals(expected,@@s)
369  end
370
371  def test_WriteL3SBML_Species
372    expected = "<species id=\"Ca2\" compartment=\"cell\" initialAmount=\"0.7\"" +
373    " substanceUnits=\"mole\" hasOnlySubstanceUnits=\"false\"" +
374    " boundaryCondition=\"true\" constant=\"true\"/>"
375    s = @@d.createModel().createSpecies()
376    s.setId("Ca2")
377    s.setCompartment("cell")
378    s.setInitialAmount(0.7)
379    s.setUnits("mole")
380    s.setBoundaryCondition(true)
381    s.setHasOnlySubstanceUnits(false)
382    s.setConstant(true)
383    assert_equal true, equals(expected,s.toSBML())
384  end
385
386  def test_WriteL3SBML_SpeciesReference
387    expected = "<speciesReference species=\"s\"" + " stoichiometry=\"3\" constant=\"true\"/>";
388    sr = @@d.createModel().createReaction().createReactant()
389    sr.setSpecies("s")
390    sr.setStoichiometry(3)
391    sr.setConstant(true)
392    assert_equal true, equals(expected,sr.toSBML())
393  end
394
395  def test_WriteL3SBML_Species_conversionFactor
396    expected = "<species id=\"Ca2\" compartment=\"cell\"" +
397    " hasOnlySubstanceUnits=\"false\"" +
398    " boundaryCondition=\"true\" constant=\"true\"" +
399    " conversionFactor=\"p\"/>"
400    expected1 = "<species id=\"Ca2\" compartment=\"cell\"" +
401    " hasOnlySubstanceUnits=\"false\"" +
402    " boundaryCondition=\"true\" constant=\"true\"/>"
403    s = @@d.createModel().createSpecies()
404    s.setId("Ca2")
405    s.setCompartment("cell")
406    s.setBoundaryCondition(true)
407    s.setHasOnlySubstanceUnits(false)
408    s.setConstant(true)
409    s.setConversionFactor("p")
410    assert_equal true, equals(expected,s.toSBML())
411    s.unsetConversionFactor()
412    assert_equal true, equals(expected1,s.toSBML())
413  end
414
415  def test_WriteL3SBML_Trigger
416    expected =  "<trigger/>";
417    t = @@d.createModel().createEvent().createTrigger()
418    assert_equal true, equals(expected,t.toSBML())
419  end
420
421  def test_WriteL3SBML_Trigger_initialValue
422    expected =  "<trigger initialValue=\"false\" persistent=\"true\"/>";
423    t = @@d.createModel().createEvent().createTrigger()
424    t.setInitialValue(false)
425    t.setPersistent(true)
426    assert_equal true, equals(expected,t.toSBML())
427  end
428
429  def test_WriteL3SBML_Trigger_persistent
430    expected =  "<trigger initialValue=\"true\" persistent=\"false\"/>";
431    t = @@d.createModel().createEvent().createTrigger()
432    t.setPersistent(false)
433    t.setInitialValue(true)
434    assert_equal true, equals(expected,t.toSBML())
435  end
436
437  def test_WriteL3SBML_Unit
438    expected = "<unit kind=\"kilogram\" exponent=\"0.2\"" + " scale=\"-3\" multiplier=\"3.2\"/>";
439    u = @@d.createModel().createUnitDefinition().createUnit()
440    u.setKind(LibSBML::UNIT_KIND_KILOGRAM)
441    exp = 0.2
442    u.setExponent(exp)
443    u.setScale(-3)
444    u.setMultiplier(3.2)
445    assert_equal true, equals(expected,u.toSBML())
446  end
447
448  def test_WriteL3SBML_UnitDefinition
449    expected = "<unitDefinition id=\"myUnit\">\n" +
450    "  <listOfUnits>\n" +
451    "    <unit kind=\"mole\" exponent=\"1\" scale=\"0\" multiplier=\"1.8\"/>\n" +
452    "  </listOfUnits>\n" +
453    "</unitDefinition>"
454    ud = @@d.createModel().createUnitDefinition()
455    ud.setId("myUnit")
456    u1 = ud.createUnit()
457    u1.setKind(LibSBML::UnitKind_forName("mole"))
458    u1.setMultiplier(1.8)
459    u1.setScale(0)
460    u1.setExponent(1)
461    assert_equal true, equals(expected,ud.toSBML())
462  end
463
464  def test_WriteL3SBML_Unit_noValues
465    expected =  "<unit/>";
466    u = @@d.createModel().createUnitDefinition().createUnit()
467    assert_equal true, equals(expected,u.toSBML())
468  end
469
470  def test_WriteL3SBML_elements
471    expected = wrapSBML_L3v1("  <model>\n" +
472    "    <listOfFunctionDefinitions>\n" +
473    "      <functionDefinition/>\n" +
474    "    </listOfFunctionDefinitions>\n" +
475    "    <listOfUnitDefinitions>\n" +
476    "      <unitDefinition/>\n" +
477    "    </listOfUnitDefinitions>\n" +
478    "    <listOfCompartments>\n" +
479    "      <compartment/>\n" +
480    "    </listOfCompartments>\n" +
481    "    <listOfSpecies>\n" +
482    "      <species/>\n" +
483    "    </listOfSpecies>\n" +
484    "    <listOfParameters>\n" +
485    "      <parameter/>\n" +
486    "    </listOfParameters>\n" +
487    "    <listOfInitialAssignments>\n" +
488    "      <initialAssignment/>\n" +
489    "    </listOfInitialAssignments>\n" +
490    "    <listOfRules>\n" +
491    "      <algebraicRule/>\n" +
492    "    </listOfRules>\n" +
493    "    <listOfConstraints>\n" +
494    "      <constraint/>\n" +
495    "    </listOfConstraints>\n" +
496    "    <listOfReactions>\n" +
497    "      <reaction/>\n" +
498    "    </listOfReactions>\n" +
499    "    <listOfEvents>\n" +
500    "      <event/>\n" +
501    "    </listOfEvents>\n" +
502    "  </model>\n")
503    m = @@d.createModel()
504    m.createUnitDefinition()
505    m.createFunctionDefinition()
506    m.createCompartment()
507    m.createEvent()
508    m.createParameter()
509    m.createAlgebraicRule()
510    m.createInitialAssignment()
511    m.createConstraint()
512    m.createReaction()
513    m.createSpecies()
514    @@s = LibSBML::writeSBMLToString(@@d)
515    assert_equal true, equals(expected,@@s)
516  end
517
518  def test_WriteL3SBML_error
519    d = LibSBML::SBMLDocument.new()
520    w = LibSBML::SBMLWriter.new()
521    assert_equal false, w.writeSBML(d, "/tmp/impossible/path/should/fail")
522    assert( d.getNumErrors() == 1 )
523    assert( d.getError(0).getErrorId() == LibSBML::XMLFileUnwritable )
524    d = nil
525    w = nil
526  end
527
528  def test_WriteL3SBML_locale
529    expected = "<parameter id=\"p\" value=\"3.31\"" + " constant=\"true\"/>";
530    p = @@d.createModel().createParameter()
531    p.setId("p")
532    p.setValue(3.31)
533    p.setConstant(true)
534    assert_equal true, equals(expected,p.toSBML())
535  end
536
537end
538
539