Commit Graph

593 Commits

Author SHA1 Message Date
Havoc Pennington
31a8e9ee57 Save the original text of parsed numbers
Value concatenation is supposed to provide an illusion that
you can just type long unquoted sentences, but really they
are a series of tokens. Be sure we don't weirdly reformat
any numbers that happen to appear in unquoted text.
2011-11-12 22:42:25 -05:00
Havoc Pennington
52f34925dc Fix equality between ConfigObject of different types
By pulling equals/hashCode up into AbstractConfigObject
2011-11-12 22:19:24 -05:00
Havoc Pennington
6528ac5d1e check Map.get, Map.containsKey, Map.containsValue implementations with non-string parameter 2011-11-12 22:19:03 -05:00
Havoc Pennington
367b1b27fa remove a few unused methods 2011-11-12 22:07:55 -05:00
Havoc Pennington
e66eaddfc7 add a test for null in value concatenation 2011-11-12 21:53:40 -05:00
Havoc Pennington
7b0e5a1471 make whitespace handling Unicode-correct.
This is maybe a little above and beyond what will ever matter in practice.
2011-11-12 21:47:35 -05:00
Havoc Pennington
b0fdc6456c Relativize substitutions when including a file
This is needed because we resolve substitutions only
as the last step, and against the whole tree not
against each file.

Special handling is needed so that fallback to
system properties and environment variables still
works properly.
2011-11-12 19:23:09 -05:00
Havoc Pennington
b034ce8de3 remove unused import 2011-11-12 18:02:01 -05:00
Havoc Pennington
5327b5d5f5 add a couple of trivial benchmarks
Basically they just reveal there's nothing worth
performance tuning here.
2011-11-12 18:01:03 -05:00
Havoc Pennington
7a63eab4ab buffer the reader instead of the stream
seems to make more sense since the reader could be smarter about it?
2011-11-12 18:00:07 -05:00
Havoc Pennington
926a726ea3 fork jvm for test, run, and test:run 2011-11-12 17:45:12 -05:00
Havoc Pennington
a706c74396 move new BufferedInputStream inside try{} block
Not sure this makes any material difference.
2011-11-12 17:44:43 -05:00
Havoc Pennington
d5fba4b8a7 buffer the input stream for loading properties 2011-11-12 17:44:18 -05:00
Havoc Pennington
b1b2403a5d add akka-reference.conf as a test case 2011-11-12 17:08:08 -05:00
Havoc Pennington
0d4feca770 if we get UnsupportedEncodingException include it as cause in the ConfigException
"Least likely thing to matter, ever"
2011-11-12 16:52:50 -05:00
Havoc Pennington
466a096398 add properties-style.conf test
Showing .conf format with a properties-looking style
2011-11-12 16:43:38 -05:00
Havoc Pennington
75a1b12284 Allow omitting commas as long as there's a newline 2011-11-12 16:36:07 -05:00
Havoc Pennington
16fa1cec0d test weird empty documents with whitespace and comments 2011-11-12 15:57:25 -05:00
Havoc Pennington
178cd17dad allow one comma after last element in object or array 2011-11-12 15:25:19 -05:00
Havoc Pennington
4051d07870 allow omitting curly braces on root object 2011-11-12 15:02:20 -05:00
Havoc Pennington
39de5aa444 allow omitting the colon if the value is an object 2011-11-12 14:36:45 -05:00
Havoc Pennington
55595e4c39 allow '=' in addition to ':' to separate key from value 2011-11-12 14:28:01 -05:00
Havoc Pennington
508c5910ad Support # and // comments 2011-11-12 12:06:56 -05:00
Havoc Pennington
796937f3ac prohibit /, #, and + from unquoted strings
because the spec proposes syntactic meanings for these
2011-11-12 10:05:39 -05:00
Havoc Pennington
be560731b8 add test for an array as not-first element of another array
Adds a line of coverage ;-)
2011-11-12 10:01:12 -05:00
Havoc Pennington
c27fa2cd68 fix a stray "return" in Scala that was making many tests not run
Then fix a few of the tests that now run. Fortunately the bugs
were all in the tests, not in the actual code.
2011-11-12 09:58:28 -05:00
Havoc Pennington
145cb40ec2 Implement include keyword 2011-11-12 09:57:57 -05:00
Havoc Pennington
5a51d590af make get() and getValue() on AbstractConfigObject return a more specific type 2011-11-12 09:26:36 -05:00
Havoc Pennington
795579f952 use SimpleConfigObject.empty() in one more spot 2011-11-12 08:39:13 -05:00
Havoc Pennington
c18f10c6dc Implement unquoted path keys, { foo.bar : 42 } 2011-11-12 01:42:43 -05:00
Havoc Pennington
a3128871ac allow duplicate keys in .conf with later key winning 2011-11-12 00:30:23 -05:00
Havoc Pennington
df3b3792da make resolveSubstitutions() do nothing on already-resolved objects.
This way if people resolve() gratuitously, there's no performance
issue. Also, tracking resolved state gives us the option to complain
about usage of unresolved objects.
2011-11-11 23:57:49 -05:00
Havoc Pennington
10babb5e8c rename Unresolved to Unmergeable 2011-11-11 22:58:26 -05:00
Havoc Pennington
9cf7b4d65a implement transformed() with a protected newCopy method instead of wrapper object 2011-11-11 22:28:23 -05:00
Havoc Pennington
839c588277 add a ConfigRoot type returned by load()
The point is to only support the resolve() method on the root object.
2011-11-11 22:11:57 -05:00
Havoc Pennington
529b3b1f55 completely drop "transformer" arg to ConfigObject constructors
If you want to change the transformer, use the transformed() method.
2011-11-11 17:28:00 -05:00
Havoc Pennington
8c00a97243 clean up merge() so it doesn't need origin or transformer
origin can be computed by combining origins of merged values.

transformer should be set prior to merge; probably it should
be an error to merge with mismatched transformers.
2011-11-11 17:18:26 -05:00
Havoc Pennington
8f0e6bd5f0 Make merging work properly with substitutions involved.
If we saw a ConfigSubstitution value, we would then
ignore any objects after it. But in fact, the substitution
might expand to an object, and then we would need to merge
it with the objects after it.

If we had an object and merged a substitution with it, we
were previously ignoring the substitution. But in fact,
the substitution might expand to an object, and we would
need to merge that object in.

So in both cases now we create a ConfigDelayedMerge
or ConfigDelayedMergeObject object instead.

As part of this, the merge() code was refactored to
use a withFallback() method, which is now handy
and public.
2011-11-11 16:32:24 -05:00
Havoc Pennington
b726948e4f make some classes final that can be 2011-11-11 11:03:23 -05:00
Havoc Pennington
ae2cd72eed make a bunch of fields final 2011-11-11 10:35:25 -05:00
Havoc Pennington
00241585bd add an empty README.md 2011-11-10 20:54:53 -05:00
Havoc Pennington
cc35f33cfa remove YAML spec 2011-11-10 20:53:36 -05:00
Havoc Pennington
a722d5249e add some tests for paths with hyphen and underscore in them 2011-11-10 20:52:06 -05:00
Havoc Pennington
d13f7861fd avoid full parser for simple paths
Kind of a stupid overoptimization probably but what the hell
2011-11-10 20:51:29 -05:00
Havoc Pennington
da09c9790c improve error message on badly-formatted number 2011-11-10 20:50:46 -05:00
Havoc Pennington
43337aa315 call getMilliseconds in ApiExamples.scala 2011-11-10 20:21:59 -05:00
Havoc Pennington
8ea188ed59 move unwrapped() return type specialization from AbstractConfigObject to ConfigObject 2011-11-10 20:19:26 -05:00
Havoc Pennington
f169f12d43 add an ApiExamples.scala to tests 2011-11-10 20:16:33 -05:00
Havoc Pennington
9a187a2de9 rename getAny to getAnyRef
makes it a better name in Scala
2011-11-10 20:16:04 -05:00
Havoc Pennington
3019aec77f move a ConfigList interface up into the public API 2011-11-10 19:53:02 -05:00