initial commits
							parent
							
								
									a421524de5
								
							
						
					
					
						commit
						c2d871f6e0
					
				|  | @ -0,0 +1,9 @@ | |||
| package rfc3986 | ||||
| 
 | ||||
| import ( | ||||
| 	"sourcecode.social/reiver/go-erorr" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	errNilWriter = erorr.Error("rfc3986: nil writer") | ||||
| ) | ||||
							
								
								
									
										5
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										5
									
								
								go.mod
								
								
								
								
							|  | @ -2,4 +2,7 @@ module sourcecode.social/reiver/go-rfc3986 | |||
| 
 | ||||
| go 1.20 | ||||
| 
 | ||||
| require sourcecode.social/reiver/go-rfc2234 v0.0.0-20231006162118-904bbffee7e4 // indirect | ||||
| require ( | ||||
| 	sourcecode.social/reiver/go-erorr v0.0.0-20230922202459-231149d185a1 // indirect | ||||
| 	sourcecode.social/reiver/go-rfc2234 v0.0.0-20231006162118-904bbffee7e4 // indirect | ||||
| ) | ||||
|  |  | |||
							
								
								
									
										2
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										2
									
								
								go.sum
								
								
								
								
							|  | @ -1,3 +1,5 @@ | |||
| sourcecode.social/reiver/go-erorr v0.0.0-20230922202459-231149d185a1 h1:wpnz4JicQBLWrgGphYBls7DysIFCcnWgDz/vce/sY8E= | ||||
| sourcecode.social/reiver/go-erorr v0.0.0-20230922202459-231149d185a1/go.mod h1:NFtd7fzEf0r6A6R7JXYZfayRhPaJy0zt/18VWoLzrxA= | ||||
| sourcecode.social/reiver/go-rfc2234 v0.0.0-20231004090151-ce553a7c22a5 h1:wCAZmyemJDcwkPVs4rODF+kDtgnvtPLLymwGjdJTGO0= | ||||
| sourcecode.social/reiver/go-rfc2234 v0.0.0-20231004090151-ce553a7c22a5/go.mod h1:EuJSji3zbYdlUu4hhW8Zs300SMcn7+7z3YqM5ZZNAyo= | ||||
| sourcecode.social/reiver/go-rfc2234 v0.0.0-20231006162118-904bbffee7e4 h1:9Ky4s8gKOCLZcAZnyd20eg61rcNI24Q3Ez1TuszC9DY= | ||||
|  |  | |||
|  | @ -0,0 +1,40 @@ | |||
| package rfc3986 | ||||
| 
 | ||||
| import ( | ||||
| 	"io" | ||||
| ) | ||||
| 
 | ||||
| func WritePctEncodedByte(writer io.Writer, b byte) error { | ||||
| 	if nil == writer { | ||||
| 		return errNilWriter | ||||
| 	} | ||||
| 
 | ||||
| 	var buffer [3]byte = [3]byte{'%','.','.'} | ||||
| 
 | ||||
| 	{ | ||||
| 		var x byte = ((b>>4) % 16) | ||||
| 
 | ||||
| 		if x < 10 { | ||||
| 			x += '0' | ||||
| 		} else { | ||||
| 			x += ('A' - 10) | ||||
| 		} | ||||
| 
 | ||||
| 		buffer[1] = x | ||||
| 	} | ||||
| 
 | ||||
| 	{ | ||||
| 		var x byte = (b & 0x0f) | ||||
| 
 | ||||
| 		if x < 10 { | ||||
| 			x += '0' | ||||
| 		} else { | ||||
| 			x += ('A' - 10) | ||||
| 		} | ||||
| 
 | ||||
| 		buffer[2] = x | ||||
| 	} | ||||
| 
 | ||||
| 	_, err := writer.Write(buffer[:]) | ||||
| 	return err | ||||
| } | ||||
|  | @ -0,0 +1,419 @@ | |||
| package rfc3986_test | ||||
| 
 | ||||
| import ( | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"strings" | ||||
| 
 | ||||
| 	"sourcecode.social/reiver/go-rfc3986" | ||||
| ) | ||||
| 
 | ||||
| func TestWritePctEncodedByte(t *testing.T) { | ||||
| 
 | ||||
| 	tests := []struct{ | ||||
| 		Value byte | ||||
| 		Expected string | ||||
| 	}{ | ||||
| 		{ | ||||
| 			Value:       0, | ||||
| 			Expected: "%00", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:       1, | ||||
| 			Expected: "%01", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:       2, | ||||
| 			Expected: "%02", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:       3, | ||||
| 			Expected: "%03", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:       4, | ||||
| 			Expected: "%04", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:       5, | ||||
| 			Expected: "%05", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:       6, | ||||
| 			Expected: "%06", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:       7, | ||||
| 			Expected: "%07", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:       8, | ||||
| 			Expected: "%08", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:       9, | ||||
| 			Expected: "%09", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      10, | ||||
| 			Expected: "%0A", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      11, | ||||
| 			Expected: "%0B", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      12, | ||||
| 			Expected: "%0C", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      13, | ||||
| 			Expected: "%0D", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      14, | ||||
| 			Expected: "%0E", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      15, | ||||
| 			Expected: "%0F", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      16, | ||||
| 			Expected: "%10", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      17, | ||||
| 			Expected: "%11", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      18, | ||||
| 			Expected: "%12", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      19, | ||||
| 			Expected: "%13", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      20, | ||||
| 			Expected: "%14", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      21, | ||||
| 			Expected: "%15", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      22, | ||||
| 			Expected: "%16", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      23, | ||||
| 			Expected: "%17", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      24, | ||||
| 			Expected: "%18", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      25, | ||||
| 			Expected: "%19", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      26, | ||||
| 			Expected: "%1A", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      27, | ||||
| 			Expected: "%1B", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      28, | ||||
| 			Expected: "%1C", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      29, | ||||
| 			Expected: "%1D", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      30, | ||||
| 			Expected: "%1E", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      31, | ||||
| 			Expected: "%1F", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      32, | ||||
| 			Expected: "%20", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      33, | ||||
| 			Expected: "%21", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      34, | ||||
| 			Expected: "%22", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      35, | ||||
| 			Expected: "%23", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      36, | ||||
| 			Expected: "%24", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      37, | ||||
| 			Expected: "%25", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      38, | ||||
| 			Expected: "%26", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      39, | ||||
| 			Expected: "%27", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      40, | ||||
| 			Expected: "%28", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      41, | ||||
| 			Expected: "%29", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      42, | ||||
| 			Expected: "%2A", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      43, | ||||
| 			Expected: "%2B", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      44, | ||||
| 			Expected: "%2C", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      45, | ||||
| 			Expected: "%2D", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      46, | ||||
| 			Expected: "%2E", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      47, | ||||
| 			Expected: "%2F", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:      48, | ||||
| 			Expected: "%30", | ||||
| 		}, | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 		{ | ||||
| 			Value:     143, | ||||
| 			Expected: "%8F", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     144, | ||||
| 			Expected: "%90", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     145, | ||||
| 			Expected: "%91", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     146, | ||||
| 			Expected: "%92", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     147, | ||||
| 			Expected: "%93", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     148, | ||||
| 			Expected: "%94", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     149, | ||||
| 			Expected: "%95", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     150, | ||||
| 			Expected: "%96", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     151, | ||||
| 			Expected: "%97", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     152, | ||||
| 			Expected: "%98", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     153, | ||||
| 			Expected: "%99", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     154, | ||||
| 			Expected: "%9A", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     155, | ||||
| 			Expected: "%9B", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     156, | ||||
| 			Expected: "%9C", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     157, | ||||
| 			Expected: "%9D", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     158, | ||||
| 			Expected: "%9E", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     159, | ||||
| 			Expected: "%9F", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     160, | ||||
| 			Expected: "%A0", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     161, | ||||
| 			Expected: "%A1", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     162, | ||||
| 			Expected: "%A2", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     163, | ||||
| 			Expected: "%A3", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     164, | ||||
| 			Expected: "%A4", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     165, | ||||
| 			Expected: "%A5", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     166, | ||||
| 			Expected: "%A6", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     167, | ||||
| 			Expected: "%A7", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     168, | ||||
| 			Expected: "%A8", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     169, | ||||
| 			Expected: "%A9", | ||||
| 		}, | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 		{ | ||||
| 			Value:     240, | ||||
| 			Expected: "%F0", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     241, | ||||
| 			Expected: "%F1", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     242, | ||||
| 			Expected: "%F2", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     243, | ||||
| 			Expected: "%F3", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     244, | ||||
| 			Expected: "%F4", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     245, | ||||
| 			Expected: "%F5", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     246, | ||||
| 			Expected: "%F6", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     247, | ||||
| 			Expected: "%F7", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     248, | ||||
| 			Expected: "%F8", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     249, | ||||
| 			Expected: "%F9", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     250, | ||||
| 			Expected: "%FA", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     251, | ||||
| 			Expected: "%FB", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     252, | ||||
| 			Expected: "%FC", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     253, | ||||
| 			Expected: "%FD", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     254, | ||||
| 			Expected: "%FE", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     255, | ||||
| 			Expected: "%FF", | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	for testNumber, test := range tests { | ||||
| 
 | ||||
| 		var buffer strings.Builder | ||||
| 
 | ||||
| 		err := rfc3986.WritePctEncodedByte(&buffer, test.Value) | ||||
| 		if nil != err { | ||||
| 			t.Errorf("For test #%d, did not expect an error but actually got one." , testNumber) | ||||
| 			t.Logf("ERROR: (%T) %s", err, err) | ||||
| 			t.Logf("VALUE: %q (%d) (%X)", test.Value, test.Value, test.Value) | ||||
| 			t.Logf("EXPECTED: %q", test.Expected) | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		{ | ||||
| 			actual := buffer.String() | ||||
| 			expected := test.Expected | ||||
| 
 | ||||
| 			if expected != actual { | ||||
| 				t.Errorf("For test #%d, the actual pct-encoded (i.e., percent-encoded) value is not what was expected.", testNumber) | ||||
| 				t.Logf("EXPECTED: %q", expected) | ||||
| 				t.Logf("ACTUAL:   %q", actual) | ||||
| 				t.Logf("VALUE: %q (%d) (%X)", test.Value, test.Value, test.Value) | ||||
| 				continue | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
		Loading…
	
		Reference in New Issue