- From: Thomas Van Lenten <thomasvl@google.com>
- Date: Mon, 27 Sep 2010 17:00:33 -0400
- To: uri@w3.org
I've been working on an Objective-C implementation of the 04 draft, and ran into some questions: - How should empty strings be handled when the expression has more then one variable reference? ('{x,empty,y}') - Section 2.3, paragraph 4 says an variable appearing more then once should have the same value, what if a different default is listed in both places? ('X{foo=val1}Y{foo=val2}Z') - How should empty strings within arrays be handled? (list = ( 'a', '', 'b' ) :: '{list}' or '{?list}') - How should empty strings as values in an associative array be handled? ('keys' = {'key1': 'val1', 'key2': '', 'key3': 'val3' } :: '{keys}' or '{?keys}') - How should empty strings as keys in an associative array be handled? ('keys' = {'key1': 'val1', 'key2': 'val2', '': 'val3' } :: '{keys}' or '{?keys}') Following the style on the JSON tests in the Python implementation, I've created a test file with some test cases for extra/exceptional behaviors that are in the draft but weren't covered with examples. I also have a testcase at the end showing the first of the above questions. TVL -- { "No varspec (section 3.3, paragraph 3)" : { "variables": { "var" : "value" }, "testcases" : [ ["{}", "{}"], ["{,}", "{,}"], ["{,,}", "{,,}"] ] }, "Missing closing brace (section 3.3 paragraph 4)" : { "variables": { "var" : "value", "hello" : "Hello World!", "list" : [ "val1", "val2", "val3" ], "keys" : {"key1": "val1", "key2": "val2"}, "x" : "1024", "y" : "768" }, "testcases" : [ ["{var", "value"], ["{hello", "Hello%20World%21"], ["{x,y", "1024,768"], ["{var=default", "value"], ["{undef=default", "default"], ["{list", "val1,val2,val3"], ["{list*", "val1,val2,val3"], ["{list+", "list.val1,list.val2,list.val3"], ["{keys", "key1,val1,key2,val2"], ["{keys*", "key1,val1,key2,val2"], ["{keys+", "keys.key1,val1,keys.key2,val2"] ] }, "varspec of only operator and explodes (section 3.3?)" : { "variables": { "var" : "value" }, "testcases" : [ ["{+}", "{+}"], ["{;}", "{;}"], ["{?}", "{?}"], ["{/}", "{/}"], ["{.}", "{.}"], ["{+,}", "{+,}"], ["{;,}", "{;,}"], ["{?,}", "{?,}"], ["{/,}", "{/,}"], ["{.,}", "{.,}"], ["{++}", "{++}"], ["{;+}", "{;+}"], ["{?+}", "{?+}"], ["{/+}", "{/+}"], ["{.+}", "{.+}"], ["{+*}", "{+*}"], ["{;*}", "{;*}"], ["{?*}", "{?*}"], ["{/*}", "{/*}"], ["{.*}", "{.*}"] ] }, "One good varspec and bad varspecs (section 3.3, paragraph 3?)" : { "variables": { "var" : "value" }, "testcases" : [ ["{var,}", "value"], ["{,var}", "value"], ["{,var,,}", "value"], ["{+var,,}", "value"], ["{;var,,}", ";var=value"], ["{?var,,}", "?var=value"], ["{/var,,}", "/value"], ["{.var,,}", ".value"], ["{+,var,}", "value"], ["{;,var,}", ";var=value"], ["{?,var,}", "?var=value"], ["{/,var,}", "/value"], ["{.,var,}", ".value"], ["{+,,var}", "value"], ["{;,,var}", ";var=value"], ["{?,,var}", "?var=value"], ["{/,,var}", "/value"], ["{.,,var}", ".value"] ] }, "Multiple undefined variables (section 3.4)" : { "variables": { "var" : "value" }, "testcases" : [ ["{undef1,undef2}", ""], ["{+undef1,undef2}", ""], ["{;undef1,undef2}", ""], ["{?undef1,undef2}", ""], ["{/undef1,undef2}", ""], ["{.undef1,undef2}", ""] ] }, "Default with variable in varspec (just reported like above cases)" : { "variables": { "var" : "value" }, "testcases" : [ ["{=foo}", "{=foo}"] ] }, "varspec with bad partial (partial gets ignored)" : { "variables": { "var" : "value" }, "testcases" : [ ["{var:}", "value"], ["{var^}", "value"] ] }, "Default of empty string and edge cases with empty strings" : { "variables": { "empty" : "", "x" : "1024", "y" : "768" }, "testcases" : [ ["{empty}", ""], ["{;x,empty,y}", ";x=1024;empty;y=768"], ["{?x,empty,y}", "?x=1024&empty&y=768"], ["{x,empty,y}", "1024,,768"], ["{+x,empty,y}", "1024,,768"], ["{/x,empty,y}", "/1024//768"], ["{.x,empty,y}", ".1024..768"], ["{undef=}", ""], ["{;x,undef=,y}", ";x=1024;undef;y=768"], ["{?x,undef=,y}", "?x=1024&undef&y=768"], ["{x,undef=,y}", "1024,,768"], ["{+x,undef=,y}", "1024,,768"], ["{/x,undef=,y}", "/1024//768"], ["{.x,undef=,y}", ".1024..768"] ] } }
Received on Monday, 27 September 2010 21:01:03 UTC