123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- // Copyright 2017 Google Inc. All rights reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- package jar
- import (
- "bytes"
- "io"
- "testing"
- )
- func TestGetJavaPackage(t *testing.T) {
- type args struct {
- r io.Reader
- src string
- }
- tests := []struct {
- name string
- in string
- want string
- wantErr bool
- }{
- {
- name: "simple",
- in: "package foo.bar;",
- want: "foo.bar",
- },
- {
- name: "comment",
- in: "/* test */\npackage foo.bar;",
- want: "foo.bar",
- },
- {
- name: "no package",
- in: "import foo.bar;",
- want: "",
- },
- {
- name: "missing semicolon error",
- in: "package foo.bar",
- wantErr: true,
- },
- {
- name: "parser error",
- in: "/*",
- wantErr: true,
- },
- {
- name: "parser ident error",
- in: "package 0foo.bar;",
- wantErr: true,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- buf := bytes.NewBufferString(tt.in)
- got, err := JavaPackage(buf, "<test>")
- if (err != nil) != tt.wantErr {
- t.Errorf("JavaPackage() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- if got != tt.want {
- t.Errorf("JavaPackage() = %v, want %v", got, tt.want)
- }
- })
- }
- }
- func Test_javaIdentRune(t *testing.T) {
- // runes that should be valid anywhere in an identifier
- validAnywhere := []rune{
- // letters, $, _
- 'a',
- 'A',
- '$',
- '_',
- // assorted unicode
- '𐐀',
- '𐐨',
- 'Dž',
- 'ῼ',
- 'ʰ',
- '゚',
- 'ƻ',
- '㡢',
- '₩',
- '_',
- 'Ⅰ',
- '𐍊',
- }
- // runes that should be invalid as the first rune in an identifier, but valid anywhere else
- validAfterFirst := []rune{
- // digits
- '0',
- // assorted unicode
- '᥍',
- '𝟎',
- 'ྂ',
- '𝆀',
- // control characters
- '\x00',
- '\b',
- '\u000e',
- '\u001b',
- '\u007f',
- '\u009f',
- '\u00ad',
- 0xE007F,
- // zero width space
- '\u200b',
- }
- // runes that should never be valid in an identifier
- invalid := []rune{
- ';',
- 0x110000,
- }
- validFirst := validAnywhere
- invalidFirst := append(validAfterFirst, invalid...)
- validPart := append(validAnywhere, validAfterFirst...)
- invalidPart := invalid
- check := func(t *testing.T, ch rune, i int, want bool) {
- t.Helper()
- if got := javaIdentRune(ch, i); got != want {
- t.Errorf("javaIdentRune() = %v, want %v", got, want)
- }
- }
- t.Run("first", func(t *testing.T) {
- t.Run("valid", func(t *testing.T) {
- for _, ch := range validFirst {
- t.Run(string(ch), func(t *testing.T) {
- check(t, ch, 0, true)
- })
- }
- })
- t.Run("invalid", func(t *testing.T) {
- for _, ch := range invalidFirst {
- t.Run(string(ch), func(t *testing.T) {
- check(t, ch, 0, false)
- })
- }
- })
- })
- t.Run("part", func(t *testing.T) {
- t.Run("valid", func(t *testing.T) {
- for _, ch := range validPart {
- t.Run(string(ch), func(t *testing.T) {
- check(t, ch, 1, true)
- })
- }
- })
- t.Run("invalid", func(t *testing.T) {
- for _, ch := range invalidPart {
- t.Run(string(ch), func(t *testing.T) {
- check(t, ch, 1, false)
- })
- }
- })
- })
- }
|