@@ -45,7 +45,7 @@ describe('CharStream', () => {
4545 assert . strictEqual ( 'b' , stream . char ) ;
4646 stream . prev ( ) ;
4747 assert . strictEqual ( '\n' , stream . char ) ;
48- assert . deepStrictEqual ( stream . getPos ( ) , { line : 1 , column : 1 } ) ;
48+ assert . deepStrictEqual ( stream . getPos ( ) , { line : 1 , column : 2 } ) ;
4949 } ) ;
5050
5151 test . concurrent ( 'line breaks' , async ( ) => {
@@ -56,7 +56,7 @@ describe('CharStream', () => {
5656 assert . strictEqual ( 'c' , stream . char ) ;
5757 stream . prev ( ) ;
5858 assert . strictEqual ( '\n' , stream . char ) ;
59- assert . deepStrictEqual ( stream . getPos ( ) , { line : 2 , column : 0 } ) ;
59+ assert . deepStrictEqual ( stream . getPos ( ) , { line : 2 , column : 1 } ) ;
6060 } ) ;
6161
6262 test . concurrent ( 'CRは読み飛ばされる' , async ( ) => {
@@ -77,6 +77,26 @@ describe('CharStream', () => {
7777 stream . prev ( ) ;
7878 assert . strictEqual ( '\ud83e\udd2f' , stream . char ) ;
7979 } ) ;
80+
81+ test . concurrent ( 'column is based on UTF-16 code unit' , async ( ) => {
82+ const source = '\ud83e\udd2f!' ;
83+ const stream = new CharStream ( source ) ;
84+ stream . next ( ) ;
85+ stream . next ( ) ;
86+ stream . prev ( ) ;
87+ assert . strictEqual ( stream . char , '!' ) ;
88+ assert . deepStrictEqual ( stream . getPos ( ) , { line : 1 , column : 3 } ) ;
89+ } ) ;
90+
91+ test . concurrent ( 'column is based on UTF-16 code unit, line break' , async ( ) => {
92+ const source = '\ud83e\udd2f\n' ;
93+ const stream = new CharStream ( source ) ;
94+ stream . next ( ) ;
95+ stream . next ( ) ;
96+ stream . prev ( ) ;
97+ assert . strictEqual ( stream . char , '\n' ) ;
98+ assert . deepStrictEqual ( stream . getPos ( ) , { line : 1 , column : 3 } ) ;
99+ } ) ;
80100 } ) ;
81101
82102 test . concurrent ( 'eof' , async ( ) => {
@@ -122,6 +142,13 @@ describe('CharStream', () => {
122142 stream . next ( ) ;
123143 assert . strictEqual ( true , stream . eof ) ;
124144 } ) ;
145+
146+ test . concurrent ( 'column is based on UTF-16 code unit' , async ( ) => {
147+ const source = '\ud83e\udd2f' ;
148+ const stream = new CharStream ( source ) ;
149+ stream . next ( ) ;
150+ assert . deepStrictEqual ( stream . getPos ( ) , { line : 1 , column : 3 } ) ;
151+ } ) ;
125152} ) ;
126153
127154describe ( 'Scanner' , ( ) => {
0 commit comments