2013-02-26 07:57:26 +00:00
package com.moandjiezana.toml ;
import static java.util.Arrays.asList ;
2015-01-22 13:18:03 +00:00
import static org.hamcrest.Matchers.contains ;
2013-02-26 07:57:26 +00:00
import static org.junit.Assert.assertEquals ;
2014-04-06 19:34:25 +00:00
import static org.junit.Assert.assertFalse ;
2015-01-22 13:18:03 +00:00
import static org.junit.Assert.assertNotNull ;
import static org.junit.Assert.assertThat ;
2013-02-26 07:57:26 +00:00
import static org.junit.Assert.assertTrue ;
import java.io.File ;
import java.util.Arrays ;
import java.util.Calendar ;
2015-01-22 13:18:03 +00:00
import java.util.List ;
2013-02-26 07:57:26 +00:00
import java.util.TimeZone ;
import org.junit.Test ;
public class RealWorldTest {
@SuppressWarnings ( " unchecked " )
@Test
public void should_parse_example ( ) throws Exception {
2015-08-14 09:12:08 +00:00
Toml toml = new Toml ( ) . read ( new File ( getClass ( ) . getResource ( " example.toml " ) . getFile ( ) ) ) ;
2013-02-26 07:57:26 +00:00
2013-03-22 12:38:01 +00:00
// printMap(root);
2013-02-26 07:57:26 +00:00
2014-04-06 19:11:52 +00:00
assertEquals ( " TOML Example " , toml . getString ( " title " ) ) ;
2013-02-26 07:57:26 +00:00
2014-04-06 20:25:21 +00:00
Toml owner = toml . getTable ( " owner " ) ;
2014-04-06 19:11:52 +00:00
assertEquals ( " Tom Preston-Werner " , owner . getString ( " name " ) ) ;
assertEquals ( " GitHub " , owner . getString ( " organization " ) ) ;
assertEquals ( " GitHub Cofounder & CEO \ nLikes tater tots and beer. " , owner . getString ( " bio " ) ) ;
2013-02-26 07:57:26 +00:00
Calendar dob = Calendar . getInstance ( ) ;
dob . set ( 1979 , Calendar . MAY , 27 , 7 , 32 , 0 ) ;
dob . set ( Calendar . MILLISECOND , 0 ) ;
dob . setTimeZone ( TimeZone . getTimeZone ( " UTC " ) ) ;
2014-04-06 19:11:52 +00:00
assertEquals ( dob . getTime ( ) , owner . getDate ( " dob " ) ) ;
2014-04-06 20:25:21 +00:00
Toml database = toml . getTable ( " database " ) ;
2014-04-06 19:11:52 +00:00
assertEquals ( " 192.168.1.1 " , database . getString ( " server " ) ) ;
assertEquals ( 5000L , database . getLong ( " connection_max " ) . longValue ( ) ) ;
assertTrue ( database . getBoolean ( " enabled " ) ) ;
2015-02-07 13:33:33 +00:00
assertEquals ( Arrays . asList ( 8001L , 8001L , 8002L ) , database . < Long > getList ( " ports " ) ) ;
2014-04-06 19:11:52 +00:00
2014-04-06 20:25:21 +00:00
Toml servers = toml . getTable ( " servers " ) ;
Toml alphaServers = servers . getTable ( " alpha " ) ;
2014-04-06 19:11:52 +00:00
assertEquals ( " 10.0.0.1 " , alphaServers . getString ( " ip " ) ) ;
assertEquals ( " eqdc10 " , alphaServers . getString ( " dc " ) ) ;
2014-04-06 20:25:21 +00:00
Toml betaServers = servers . getTable ( " beta " ) ;
2014-04-06 19:11:52 +00:00
assertEquals ( " 10.0.0.2 " , betaServers . getString ( " ip " ) ) ;
assertEquals ( " eqdc10 " , betaServers . getString ( " dc " ) ) ;
2014-04-07 13:42:49 +00:00
assertEquals ( " 中国 " , betaServers . getString ( " country " ) ) ;
2014-04-06 19:11:52 +00:00
2014-04-06 20:25:21 +00:00
Toml clients = toml . getTable ( " clients " ) ;
2015-02-07 13:33:33 +00:00
assertEquals ( asList ( asList ( " gamma " , " delta " ) , asList ( 1L , 2L ) ) , clients . < String > getList ( " data " ) ) ;
assertEquals ( asList ( " alpha " , " omega " ) , clients . < String > getList ( " hosts " ) ) ;
2013-02-26 07:57:26 +00:00
}
2013-02-28 07:33:16 +00:00
@Test
public void should_parse_hard_example ( ) throws Exception {
2015-08-14 09:12:08 +00:00
Toml toml = new Toml ( ) . read ( new File ( getClass ( ) . getResource ( " hard_example.toml " ) . getFile ( ) ) ) ;
2013-02-28 07:33:16 +00:00
assertEquals ( " You'll hate me after this - # " , toml . getString ( " the.test_string " ) ) ;
2015-02-07 13:33:33 +00:00
assertEquals ( asList ( " ] " , " # " ) , toml . < String > getList ( " the.hard.test_array " ) ) ;
assertEquals ( asList ( " Test #11 ]proved that " , " Experiment #9 was a success " ) , toml . < String > getList ( " the.hard.test_array2 " ) ) ;
2013-02-28 07:33:16 +00:00
assertEquals ( " Same thing, but with a string # " , toml . getString ( " the.hard.another_test_string " ) ) ;
assertEquals ( " And when \" 's are in the string, along with # \" " , toml . getString ( " the.hard.harder_test_string " ) ) ;
2015-01-22 13:18:03 +00:00
Toml theHardBit = toml . getTable ( " the.hard. \" bit# \" " ) ;
assertEquals ( " You don't think some user won't do that? " , theHardBit . getString ( " \" what? \" " ) ) ;
2015-02-07 13:33:33 +00:00
assertEquals ( asList ( " ] " ) , theHardBit . < String > getList ( " multi_line_array " ) ) ;
2013-02-28 07:33:16 +00:00
}
2015-01-22 13:18:03 +00:00
@SuppressWarnings ( " unchecked " )
@Test
public void should_parse_current_version_example ( ) throws Exception {
2015-08-14 09:12:08 +00:00
Toml toml = new Toml ( ) . read ( new File ( getClass ( ) . getResource ( " example-v0.4.0.toml " ) . getFile ( ) ) ) ;
2015-01-22 13:18:03 +00:00
2015-02-17 08:21:17 +00:00
assertEquals ( " value " , toml . getString ( " table.key " ) ) ;
assertEquals ( " another value " , toml . getString ( " table.subtable.key " ) ) ;
2015-01-22 13:18:03 +00:00
assertNotNull ( toml . getTable ( " x.y.z " ) . getTable ( " w " ) ) ;
2015-02-17 08:21:17 +00:00
assertEquals ( " Tom " , toml . getString ( " table.inline.name.first " ) ) ;
assertEquals ( " Preston-Werner " , toml . getString ( " table.inline.name.last " ) ) ;
assertEquals ( 1 , toml . getLong ( " table.inline.point.x " ) . intValue ( ) ) ;
assertEquals ( 2 , toml . getLong ( " table.inline.point.y " ) . intValue ( ) ) ;
// assertEquals("pug", toml.getString("dog.tater.type"));
assertEquals ( " I'm a string. \" You can quote me \" . Name \ tJosé \ nLocation \ tSF. " , toml . getString ( " string.basic.basic " ) ) ;
assertEquals ( " One \ nTwo " , toml . getString ( " string.multiline.key3 " ) ) ;
assertEquals ( toml . getString ( " string.multiline.key3 " ) , toml . getString ( " string.multiline.key1 " ) ) ;
assertEquals ( toml . getString ( " string.multiline.key3 " ) , toml . getString ( " string.multiline.key2 " ) ) ;
assertEquals ( " The quick brown fox jumps over the lazy dog. " , toml . getString ( " string.multiline.continued.key1 " ) ) ;
assertEquals ( " The quick brown fox jumps over the lazy dog. " , toml . getString ( " string.multiline.continued.key2 " ) ) ;
assertEquals ( toml . getString ( " string.multilined.singleline.key3 " ) , toml . getString ( " string.multilined.singleline.key1 " ) ) ;
assertEquals ( toml . getString ( " string.multilined.singleline.key3 " ) , toml . getString ( " string.multilined.singleline.key2 " ) ) ;
assertEquals ( " C: \\ Users \\ nodejs \\ templates " , toml . getString ( " string.literal.winpath " ) ) ;
assertEquals ( " \\ \\ ServerX \\ admin$ \\ system32 \\ " , toml . getString ( " string.literal.winpath2 " ) ) ;
assertEquals ( " Tom \" Dubs \" Preston-Werner " , toml . getString ( " string.literal.quoted " ) ) ;
assertEquals ( " < \\ i \\ c* \\ s*> " , toml . getString ( " string.literal.regex " ) ) ;
assertEquals ( " I [dw]on't need \\ d{2} apples " , toml . getString ( " string.literal.multiline.regex2 " ) ) ;
assertEquals ( " The first newline is \ ntrimmed in raw strings. \ n All other whitespace \ n is preserved. \ n " , toml . getString ( " string.literal.multiline.lines " ) ) ;
assertEquals ( 99 , toml . getLong ( " integer.key1 " ) . intValue ( ) ) ;
assertEquals ( 42 , toml . getLong ( " integer.key2 " ) . intValue ( ) ) ;
assertEquals ( 0 , toml . getLong ( " integer.key3 " ) . intValue ( ) ) ;
assertEquals ( - 17 , toml . getLong ( " integer.key4 " ) . intValue ( ) ) ;
assertEquals ( 1000 , toml . getLong ( " integer.underscores.key1 " ) . intValue ( ) ) ;
assertEquals ( 5349221 , toml . getLong ( " integer.underscores.key2 " ) . longValue ( ) ) ;
assertEquals ( 12345 , toml . getLong ( " integer.underscores.key3 " ) . intValue ( ) ) ;
assertEquals ( 1 . 0 , toml . getDouble ( " float.fractional.key1 " ) . doubleValue ( ) , 0 ) ;
assertEquals ( 3 . 1415 , toml . getDouble ( " float.fractional.key2 " ) . doubleValue ( ) , 0 ) ;
assertEquals ( - 0 . 01 , toml . getDouble ( " float.fractional.key3 " ) . doubleValue ( ) , 0 ) ;
assertEquals ( 5e + 22 , toml . getDouble ( " float.exponent.key1 " ) . doubleValue ( ) , 0 ) ;
assertEquals ( 1e6 , toml . getDouble ( " float.exponent.key2 " ) . longValue ( ) , 0 ) ;
assertEquals ( - 2E - 2 , toml . getDouble ( " float.exponent.key3 " ) . doubleValue ( ) , 0 ) ;
assertEquals ( 6 . 626e - 34 , toml . getDouble ( " float.both.key " ) . doubleValue ( ) , 0 ) ;
assertTrue ( toml . getBoolean ( " boolean.True " ) ) ;
assertFalse ( toml . getBoolean ( " boolean.False " ) ) ;
assertThat ( toml . < Long > getList ( " array.key1 " ) , contains ( 1L , 2L , 3L ) ) ;
assertThat ( toml . < String > getList ( " array.key2 " ) , contains ( " red " , " yellow " , " green " ) ) ;
assertEquals ( asList ( asList ( 1L , 2L ) , asList ( 3L , 4L , 5L ) ) , toml . < List < Long > > getList ( " array.key3 " ) ) ;
assertEquals ( asList ( asList ( 1L , 2L ) , asList ( " a " , " b " , " c " ) ) , toml . < List < Long > > getList ( " array.key4 " ) ) ;
assertThat ( toml . < Long > getList ( " array.key5 " ) , contains ( 1L , 2L , 3L ) ) ;
assertThat ( toml . < Long > getList ( " array.key6 " ) , contains ( 1L , 2L ) ) ;
2015-01-22 13:18:03 +00:00
assertEquals ( " Hammer " , toml . getString ( " products[0].name " ) ) ;
assertEquals ( 738594937 , toml . getLong ( " products[0].sku " ) . intValue ( ) ) ;
assertNotNull ( toml . getTable ( " products[1] " ) ) ;
assertEquals ( " Nail " , toml . getString ( " products[2].name " ) ) ;
assertEquals ( 284758393 , toml . getLong ( " products[2].sku " ) . intValue ( ) ) ;
assertEquals ( " gray " , toml . getString ( " products[2].color " ) ) ;
assertEquals ( " apple " , toml . getString ( " fruit[0].name " ) ) ;
assertEquals ( " red " , toml . getString ( " fruit[0].physical.color " ) ) ;
assertEquals ( " round " , toml . getString ( " fruit[0].physical.shape " ) ) ;
assertEquals ( " red delicious " , toml . getString ( " fruit[0].variety[0].name " ) ) ;
assertEquals ( " granny smith " , toml . getString ( " fruit[0].variety[1].name " ) ) ;
assertEquals ( " banana " , toml . getString ( " fruit[1].name " ) ) ;
assertEquals ( " plantain " , toml . getString ( " fruit[1].variety[0].name " ) ) ;
Calendar dob = Calendar . getInstance ( ) ;
dob . set ( 1979 , Calendar . MAY , 27 , 7 , 32 , 0 ) ;
dob . set ( Calendar . MILLISECOND , 0 ) ;
dob . setTimeZone ( TimeZone . getTimeZone ( " UTC " ) ) ;
2015-02-17 08:21:17 +00:00
assertEquals ( dob . getTime ( ) , toml . getDate ( " datetime.key1 " ) ) ;
assertEquals ( dob . getTime ( ) , toml . getDate ( " datetime.key2 " ) ) ;
2015-01-22 13:18:03 +00:00
dob . set ( Calendar . MILLISECOND , 999 ) ;
2015-02-17 08:21:17 +00:00
assertEquals ( dob . getTime ( ) , toml . getDate ( " datetime.key3 " ) ) ;
2015-01-22 13:18:03 +00:00
}
2013-02-28 07:33:16 +00:00
2014-04-06 19:34:25 +00:00
@Test
2014-04-06 20:55:56 +00:00
public void should_allow_keys_with_same_name_in_different_tables ( ) throws Exception {
2015-08-14 09:12:08 +00:00
Toml toml = new Toml ( ) . read ( new File ( getClass ( ) . getResource ( " should_allow_keys_with_same_name_in_different_tables.toml " ) . getFile ( ) ) ) ;
2014-04-06 19:34:25 +00:00
2014-04-06 20:25:21 +00:00
assertTrue ( toml . getTable ( " siteInfo.local.sh " ) . getBoolean ( " enable " ) ) ;
assertFalse ( toml . getTable ( " siteInfo.localMobile.sh " ) . getBoolean ( " enable " ) ) ;
2014-04-06 19:34:25 +00:00
}
2013-02-26 07:57:26 +00:00
}