/*
 * Copyright (C) 2019 The Android Open Source Project
 *
 * 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 android.view.textclassifier.logging;

import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;

import com.google.common.truth.Truth;
import org.junit.Test;
import org.junit.runner.RunWith;

@SmallTest
@RunWith(AndroidJUnit4.class)
public class SmartSelectionEventTrackerTest {

    @Test
    public void getVersionInfo_valid() {
        String signature = "a|702|b";
        String versionInfo = SmartSelectionEventTracker.SelectionEvent.getVersionInfo(signature);
        Truth.assertThat(versionInfo).isEqualTo("702");
    }

    @Test
    public void getVersionInfo_invalid() {
        String signature = "|702";
        String versionInfo = SmartSelectionEventTracker.SelectionEvent.getVersionInfo(signature);
        Truth.assertThat(versionInfo).isEmpty();
    }
}
