blob: 99a4e1b7ed789ba40063d8c5570097c5a78c480a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.iotdb.tsfile.read.common;
import org.apache.iotdb.tsfile.exception.PathParseException;
import org.apache.iotdb.tsfile.read.common.parser.PathVisitor;
import org.junit.Assert;
import org.junit.Test;
import static org.junit.Assert.fail;
public class PathTest {
@Test
public void testLegalPath() {
// empty path
Path a = new Path("", true);
Assert.assertEquals("", a.getDevice());
Assert.assertEquals("", a.getMeasurement());
// empty device
Path b = new Path("s1", true);
Assert.assertEquals("s1", b.getMeasurement());
Assert.assertEquals("", b.getDevice());
// normal node
Path c = new Path("root.sg.a", true);
Assert.assertEquals("root.sg", c.getDevice());
Assert.assertEquals("a", c.getMeasurement());
// quoted node
Path d = new Path("root.sg.`a.b`", true);
Assert.assertEquals("root.sg", d.getDevice());
Assert.assertEquals("`a.b`", d.getMeasurement());
Path e = new Path("root.sg.`a.``b`", true);
Assert.assertEquals("root.sg", e.getDevice());
Assert.assertEquals("`a.``b`", e.getMeasurement());
Path f = new Path("root.`sg\"`.`a.``b`", true);
Assert.assertEquals("root.`sg\"`", f.getDevice());
Assert.assertEquals("`a.``b`", f.getMeasurement());
Path g = new Path("root.sg.`a.b\\\\`", true);
Assert.assertEquals("root.sg", g.getDevice());
Assert.assertEquals("`a.b\\\\`", g.getMeasurement());
// quoted node of digits
Path h = new Path("root.sg.`111`", true);
Assert.assertEquals("root.sg", h.getDevice());
Assert.assertEquals("`111`", h.getMeasurement());
// quoted node of key word
Path i = new Path("root.sg.`select`", true);
Assert.assertEquals("root.sg", i.getDevice());
Assert.assertEquals("select", i.getMeasurement());
// wildcard
Path j = new Path("root.sg.`a*b`", true);
Assert.assertEquals("root.sg", j.getDevice());
Assert.assertEquals("`a*b`", j.getMeasurement());
Path k = new Path("root.sg.*", true);
Assert.assertEquals("root.sg", k.getDevice());
Assert.assertEquals("*", k.getMeasurement());
Path l = new Path("root.sg.**", true);
Assert.assertEquals("root.sg", l.getDevice());
Assert.assertEquals("**", l.getMeasurement());
// raw key word
Path m = new Path("root.sg.select", true);
Assert.assertEquals("root.sg", m.getDevice());
Assert.assertEquals("select", m.getMeasurement());
Path n = new Path("root.sg.device", true);
Assert.assertEquals("root.sg", n.getDevice());
Assert.assertEquals("device", n.getMeasurement());
Path o = new Path("root.sg.drop_trigger", true);
Assert.assertEquals("root.sg", o.getDevice());
Assert.assertEquals("drop_trigger", o.getMeasurement());
Path p = new Path("root.sg.and", true);
Assert.assertEquals("root.sg", p.getDevice());
Assert.assertEquals("and", p.getMeasurement());
p = new Path("root.sg.or", true);
Assert.assertEquals("root.sg", p.getDevice());
Assert.assertEquals("or", p.getMeasurement());
p = new Path("root.sg.not", true);
Assert.assertEquals("root.sg", p.getDevice());
Assert.assertEquals("not", p.getMeasurement());
p = new Path("root.sg.null", true);
Assert.assertEquals("root.sg", p.getDevice());
Assert.assertEquals("null", p.getMeasurement());
p = new Path("root.sg.contains", true);
Assert.assertEquals("root.sg", p.getDevice());
Assert.assertEquals("contains", p.getMeasurement());
p = new Path("root.sg.`0000`", true);
Assert.assertEquals("root.sg", p.getDevice());
Assert.assertEquals("`0000`", p.getMeasurement());
p = new Path("root.sg.`0e38`", true);
Assert.assertEquals("root.sg", p.getDevice());
Assert.assertEquals("`0e38`", p.getMeasurement());
p = new Path("root.sg.`00.12`", true);
Assert.assertEquals("root.sg", p.getDevice());
Assert.assertEquals("`00.12`", p.getMeasurement());
}
@Test
public void tesIllegalPath() {
try {
new Path("root.sg`", true);
fail();
} catch (PathParseException ignored) {
}
try {
new Path("root.sg\na", true);
fail();
} catch (PathParseException ignored) {
}
try {
new Path("root.select`", true);
fail();
} catch (PathParseException ignored) {
}
try {
// pure digits
new Path("root.111", true);
fail();
} catch (PathParseException ignored) {
}
try {
// single ` in quoted node
new Path("root.`a``", true);
fail();
} catch (PathParseException ignored) {
}
try {
// single ` in quoted node
new Path("root.``a`", true);
fail();
} catch (PathParseException ignored) {
}
try {
new Path("root.a*%", true);
fail();
} catch (PathParseException ignored) {
}
try {
new Path("root.a*b", true);
fail();
} catch (PathParseException ignored) {
}
try {
new Path("root.0e38", true);
fail();
} catch (PathParseException ignored) {
}
try {
new Path("root.0000", true);
fail();
} catch (PathParseException ignored) {
}
}
@Test
public void testRealNumber() {
Assert.assertTrue(PathVisitor.isRealNumber("0e38"));
Assert.assertTrue(PathVisitor.isRealNumber("0000"));
Assert.assertTrue(PathVisitor.isRealNumber("00.12"));
}
}